鏍堢殑鐗圭偣錛氬悗榪涘厛鍑猴紝鎵浠ヤ竴涓嚎鎬ч摼琛ㄥ疄鐜扮殑鏍堜篃鍙兘鍦ㄤ竴绔搷浣滄墠鑳芥弧瓚寵繖縐嶇壒鎬э紱
/**
* @Author: zzz
* @CreateTime: 2017/3/27 14:51
* @Description:
*/
public class MyStack<T> {
private Node top;//姘歌繙鎸囧悜鏍堥《鍏冪礌
//鍏冪礌涓暟
private int size;
/**
* 鍐呴儴綾伙紝瀹氫箟鑺傜偣
*/
private class Node {
public T data;
public Node next;
public Node(T data, Node next) {
this.data = data;
this.next = next;
}
}
public void push(T data) {
//next 鎸囧悜褰撳墠鍏冪礌top,濡傛灉鏄涓涓厓绱?/span>next 鎸囧悜null;
Node node = new Node(data, top);
//鎶婂綋鍓嶅厓绱犳寚鍚?/span>top
top = node;
size++;
}
public T pop() {
Node oldNode = top;
top = top.next;
oldNode.next = null;
//閲婃斁寮曠敤
return oldNode.data;
}
//榪斿洖鏍堥《鐨勫厓绱狅紝浣嗕笉鍑烘爤
public T peek() {
return top.data;
}
// 鍒ゆ柇閾炬爤鏄惁涓虹┖鏍?br /> public boolean empty() {
return size == 0;
}
public String toString() {
// 閾炬爤涓虹┖閾炬爤鏃?br /> if (empty())
return "[]";
else {
StringBuilder sb = new StringBuilder("[");
for (Node current = top; current != null; current = current.next) {
sb.append(current.data.toString() + ", ");
}
int len = sb.length();
return sb.delete(len - 2, len).append("]").toString();
}
}
public static void main(String[] args) throws Exception {
MyStack stack = new MyStack<String>();
for (int i = 0; i <= 10; i++) {
stack.push("111111-" + i);
}
System.out.println(stack);
System.out.println("frist pop="+stack.pop());
System.out.println("second pop="+stack.pop());
System.out.println("thrid pop="+stack.pop());
System.out.println("pop 涔嬪悗鐨?/span>"+stack);
}/**
* Created by zz.zhang on 2018/1/4.
*/
public class MyStack<T> {
private int DEFAULT_SIZE = 8;//瀹氫箟鏍堢殑鍒濆榛樿闀垮害
private int capacity;//淇濆瓨欏哄簭鏍堢殑闀垮害
private int size;//淇濆瓨欏哄簭鏍堜腑鍏冪礌鐨勪釜鏁?/span>
private Object[] elementData;//瀹氫箟涓涓暟緇勭敤浜庝繚瀛橀『搴忔爤涓殑鍏冪礌
public MyStack() {
capacity = DEFAULT_SIZE;
elementData = new Object[capacity];
}
public MyStack(int initSize) {
capacity = 1;
while (capacity < initSize) {
capacity <<= 1;//灝哻apacity璁劇疆鎴愬ぇ浜巌nitSize鐨勬渶灝?嬈℃柟
}
elementData = new Object[capacity];
}
public void push(T element) throws Exception {
elementData[size++] = element;
}
public T pop() throws Exception {
if (empty()) {
throw new IndexOutOfBoundsException("鏍堢┖錛屼笉鑳藉嚭鏍?);
}
T oldValue = (T) elementData[size - 1];
elementData[--size] = null; // 璁劇疆鎴恘ull 璁㎎VM鍨冨溇鍥炴敹
return oldValue;
}
public boolean empty() {
return size == 0;
}
//榪斿洖褰撳墠欏哄簭鏍堜腑鍏冪礌鐨勪釜鏁?/span>
public int length() {
return size;
}
//鑾峰彇鏍堥《鍏冪礌錛屼笉浼?xì)灏嗘爤椤跺厓绱犲垹闄?/span>
public T peek() throws Exception {
if (size == 0)
throw new ArrayIndexOutOfBoundsException("鏍堜負(fù)絀?);
return (T) elementData[size - 1];
}
public void clear() {
for (int i = 0; i < size; i++) {
elementData[i] = null;
}
size = 0;
}
public static void main(String[] args)throws Exception{
MyStack<String> stack=new MyStack<String>(30);
for(int i=0 ;i<30;i++){
stack.push(String.valueOf(i));
}
System.out.println(stack.pop());
System.out.println(stack.peek());
}
}
HASH 涓昏鐢ㄤ簬淇℃伅瀹夊叏棰嗗煙涓姞瀵嗙畻娉曪紝瀹冩妸涓浜涗笉鍚岄暱搴︾殑淇℃伅杞寲鎴愭潅涔辯殑128 浣嶇殑緙栫爜, 榪欎簺緙栫爜鍊煎彨鍋欻ASH 鍊? 涔熷彲浠ヨ錛宧ash 灝辨槸鎵懼埌涓縐嶆暟鎹唴瀹瑰拰鏁版嵁瀛樻斁鍦板潃涔嬮棿鐨勬槧灝勫叧緋?/p>
渚嬪瀛楃涓?nbsp;hello 鐨勫搱甯岀畻娉?/p>
char* value = "hello"; int key = (((((((27* (int)'h'+27)* (int)'e') + 27) 銆* (int)'l') + 27) * (int)'l' +27) * 27 ) + (int)'o' ;銆?/p>
鏁扮粍鐨勭壒鐐規(guī)槸錛氬鍧瀹規(guī)槗錛屾彃鍏ュ拰鍒犻櫎鍥伴毦錛涜岄摼琛ㄧ殑鐗圭偣鏄細(xì)瀵誨潃鍥伴毦錛屾彃鍏ュ拰鍒犻櫎瀹規(guī)槗銆傞偅涔堟垜浠兘涓嶈兘緇煎悎涓よ呯殑鐗規(guī)э紝鍋氬嚭涓縐嶅鍧瀹規(guī)槗錛屾彃鍏ュ垹闄や篃瀹規(guī)槗 鐨勬暟鎹粨鏋勶紵絳旀鏄偗瀹氱殑錛岃繖灝辨槸鎴戜滑瑕佹彁璧風(fēng)殑鍝堝笇琛紝鍝堝笇琛ㄦ湁澶氱涓嶅悓鐨勫疄鐜版柟娉曪紝鎴戞帴涓嬫潵瑙i噴鐨勬槸鏈甯哥敤鐨勪竴縐嶆柟娉?#8212;— 鎷夐摼娉曪紝鎴戜滑鍙互鐞嗚В涓?#8220; 閾捐〃 鐨勬暟緇?#8221; 錛屽鍥撅細(xì)
HashMap鍏跺疄涔熸槸涓涓嚎鎬х殑鏁扮粍瀹炵幇鐨?鎵浠ュ彲浠ョ悊瑙d負(fù)鍏跺瓨鍌ㄦ暟鎹殑瀹瑰櫒灝辨槸涓涓嚎鎬ф暟緇勩傝繖鍙兘璁╂垜浠緢涓嶈В錛屼竴涓嚎鎬х殑鏁扮粍鎬庝箞瀹炵幇鎸夐敭鍊煎鏉ュ瓨鍙栨暟鎹憿錛熻繖閲孒ashMap鏈夊仛涓浜涘鐞嗐?/p>
1.棣栧厛HashMap閲岄潰瀹炵幇涓涓潤(rùn)鎬佸唴閮ㄧ被Entry 鍏墮噸瑕佺殑灞炴ф湁 key , value, next,浠庡睘鎬ey,value鎴戜滑灝辮兘寰堟槑鏄劇殑鐪嬪嚭鏉ntry灝辨槸HashMap閿煎瀹炵幇鐨勪竴涓熀紜bean,鎴戜滑涓婇潰璇村埌HashMap鐨勫熀 紜灝辨槸涓涓嚎鎬ф暟緇?榪欎釜鏁扮粍灝辨槸Entry[]錛孧ap閲岄潰鐨勫唴瀹歸兘淇濆瓨鍦‥ntry[]閲岄潰銆?/p>
2.鏃㈢劧鏄嚎鎬ф暟緇勶紝涓轟粈涔堣兘闅忔満瀛樺彇錛熻繖閲孒ashMap鐢ㄤ簡(jiǎn)涓涓皬綆楁硶錛屽ぇ鑷存槸榪欐牱瀹炵幇錛?/p>
鍒拌繖閲屾垜浠交鏉劇殑鐞嗚В浜?jiǎn)HashMap閫氳繃閿煎瀹炵幇瀛樺彇鐨勫熀鏈師鐞?/p>
3.鐤戦棶錛氬鏋滀袱涓猭ey閫氳繃hash % Entry[].length寰楀埌鐨刬ndex鐩稿悓錛屼細(xì)涓嶄細(xì)鏈夎鐩栫殑鍗遍櫓錛?/p>
榪欓噷HashMap閲岄潰鐢ㄥ埌閾懼紡鏁版嵁緇撴瀯鐨勪竴涓蹇?涓婇潰鎴戜滑鎻愬埌榪嘐ntry綾婚噷闈㈡湁涓涓猲ext灞炴?浣滅敤鏄寚鍚戜笅涓涓狤ntry銆傛墦涓瘮鏂? 絎竴涓敭鍊煎A榪涙潵,閫氳繃璁$畻鍏秌ey鐨刪ash寰楀埌鐨刬ndex=0錛岃鍋?Entry[0] = A.涓浼?xì)鍚庡張杩涙潵涓涓敭鍊煎B,閫氳繃璁$畻鍏秈ndex涔熺瓑浜?,鐜板湪鎬庝箞鍔烇紵HashMap浼?xì)杩欐牱鍋?B.next = A,Entry[0] = B,濡傛灉鍙堣繘鏉,index涔熺瓑浜?,閭d箞C.next = B,Entry[0] = C錛涜繖鏍鋒垜浠彂鐜癷ndex=0鐨勫湴鏂瑰叾瀹炲瓨鍙栦簡(jiǎn)A,B,C涓変釜閿煎,浠栦滑閫氳繃next榪欎釜灞炴ч摼鎺ュ湪涓璧楓傛墍浠ョ枒闂笉鐢ㄦ媴蹇?jī)銆?/p>
鍒拌繖閲屼負(fù)姝紝HashMap鐨勫ぇ鑷村疄鐜幫紝鎴戜滑搴旇宸茬粡娓呮浜?jiǎn)銆?/p>
褰撶劧HashMap閲岄潰涔熷寘鍚竴浜涗紭鍖栨柟闈㈢殑瀹炵幇錛岃繖閲屼篃鍟板棪涓涓嬨?/p>
姣斿錛欵ntry[]鐨勯暱搴︿竴瀹氬悗錛岄殢鐫map閲岄潰鏁版嵁鐨勮秺鏉ヨ秺闀匡紝榪欐牱鍚屼竴涓猧ndex鐨勯摼灝變細(xì)寰堥暱錛屼細(xì)涓嶄細(xì)褰卞搷鎬ц兘錛?/p>
HashMap閲岄潰璁劇疆涓涓洜绱狅紙涔熺О涓哄洜瀛愶級(jí)錛岄殢鐫map鐨剆ize瓚婃潵瓚婂ぇ錛孍ntry[]浼?xì)浠ヤ竴瀹氱殑瑙勫垯鍔犻暱闀垮害銆?/p>
瑙e喅hash鍐茬獊鐨勫姙娉?/p>
1錛夊紑鏀懼畾鍧娉曪紙綰挎ф帰嫻嬪啀鏁e垪錛屼簩嬈℃帰嫻嬪啀鏁e垪錛屼吉闅忔満鎺㈡祴鍐嶆暎鍒楋級(jí)
2錛夊啀鍝堝笇娉?/p>
3錛夐摼鍦板潃娉?/p>
4錛夊緩绔嬩竴 鍏叡婧㈠嚭鍖?/p>
java 涓環(huán)ashmap鐨勮В鍐沖姙娉曞氨鏄噰鐢ㄧ殑閾懼湴鍧娉?br />杞澆鏂囩珷