浼楁墍鍛ㄧ煡锛孞ava1.7鍙婁箣鍓嶇殑HashMap閾捐〃鎻掑叆鍏冪礌閮芥槸浣跨敤澶撮儴鎻掑叆鏂瑰紡锛岃繖浼氬鑷撮摼琛ㄥ湪澶氱嚎绋嬩腑鍑虹幇寰幆threaded鐜锛岃鎼滅储鏃朵細闄峰叆姝诲惊鐜紙CPU鍝煒級銆侸ava1.8瀵硅繖涓棶棰樿繘琛屼簡浼樺寲锛屼娇鐢ㄤ簡澶存彃鍏ユ硶锛岄偅涔堝熬鎻掑叆娉曞拰澶存彃鍏ユ硶鏈変粈涔堝尯鍒憿锛熼澶囩煡璇嗭細HashMap鐨勬墿灞曟満鍒跺厛鎶婃簮鐮佹斁鍦ㄨ繖閲岋細voidresize(intnewCapacity){...Entry[]newTable=newEntry[newCapacity];//鏂版棫琛ㄨ浆鎹ransfer(newTable,initHashSeedAsNeeded(newCapacity));琛?鏂拌〃锛泃hreshold=(int)Math.min(newCapacity*loadFactor,MAXIMUM_CAPACITY+1);}voidtransfer(Entry[]newTable,booleanrehash){intnewCapacity=newTable.length;//1.閬嶅巻鏃ц〃for(Entrye:table){//2.濡傛灉鍏冪礌涓嶄负绌猴紝鍒欓亶鍘咵ntry鍏冪礌while(null!=e){//淇濆瓨涓嬩竴涓妭鐐筫firstnext=e.next;..///4.缁х画閬嶅巻Entry瀛愯妭鐐筫=next;}}}鍙互鐪嬪嚭锛屾墿瀹瑰垎涓ゆ锛氭柊寤轰竴涓閲忎负鍘熸潵涓ゅ€嶇殑Entry鏁扮粍锛屽皢鏃х殑Entry鏁扮粍澶嶅埗鍒版柊鐨勬暟缁勪腑锛岀敱浜嶦ntry鏁扮粍鐨勯暱搴﹀彉闀匡紝涓嬫爣鍘熷鑺傜偣鐨勫彲鑳戒細鏀瑰彉銆傚叿浣撴槸鍥犱负涓嬫爣鐨勮绠楁柟寮忥細(n-1)&hash銆傚浜庡悓涓€涓搱甯屽€硷紝濡傛灉闀垮害鍙戠敓鍙樺寲锛屽緱鍒扮殑涓嬫爣涔熷彲鑳戒笉鍚屻€傚浜嗭紝HashMap鐨勫垵濮嬪閲忔槸16锛屽彧瑕乶鏄?鐨勫箓锛岄偅涔坣-1鐨勪簩杩涘埗鏁颁竴瀹氬叏涓?銆傚亣璁炬湁i浣嶏紝閭d箞瀹冨繀椤讳繚鐣欐渶鍚巌浣峢ash鍦ㄥ浠讳綍hash杩涜&杩愮畻鏃讹紙&杩愮畻閮戒负1鏃舵墠涓?锛夛紝杩欐牱钀界殑寰堝潎鍖€锛屼笉瀹规槗鍐茬獊銆傚洖鍒拌繖閲岋紝灏嗘棫鏁扮粍鐨勫厓绱犲鍒跺埌鏂版暟缁勪腑銆傚鏋滄槸灏炬彃鍏ユ硶锛屽垯瑕侀亶鍘嗘暣涓摼琛紝澶嶆潅搴︿负O(N)锛岃€屽ご鎻掑叆娉曠殑澶嶆潅搴︿粎涓篛(1)锛屼负浠€涔堝憿锛熼偅鐢ㄥ熬鎻掓硶鍛紵鎴戜滑鍏堟潵鐪嬩竴涓媓eader鐨勬彃鍏ユ柟寮忋€傚€熺敤澶т浆鐨勪竴寮犲浘锛氬彲浠ョ湅鍑猴紝鎻掑叆鏂拌妭鐐规椂锛宧ead鎻掑叆鏂瑰紡鏄厛灏嗘柊鑺傜偣鐨刵ext鎸囧悜c1(L.next)锛岀劧鍚庡皢L.next璁剧疆涓烘柊鑺傜偣鑺傜偣銆傚鏋滃湪澶氱嚎绋嬬幆澧冧笅锛宬ey鍊糼瀵瑰簲鐨勯摼琛ㄤ负k=a->b->null锛?.绾跨▼A鍏堣繍琛岋紝鏀惧叆鍏冪礌c锛屾鏃舵墿瀹癸紝閫愭笎澶嶅埗鍏冪礌锛岃繍琛屽埌涓嬩竴涓?e銆俷ext鐨勬椂鍊欙紝杩欓噷鐨刵ext鏄痑.next锛屼篃灏辨槸b銆?銆佺劧鍚庢鏃剁嚎绋婤杩愯锛屾斁鍏ュ厓绱燿锛孊涔熷睍寮€锛孊涓殑閾捐〃鍙樹负b->a->null锛屾鏃禸.next=a銆?銆佹鏃禔鍐嶆杩愯锛岀涓€娆hile锛宔=a锛宯ext=b锛屽皢a澶嶅埗鍒伴摼琛ㄤ腑锛宎.next鍙樹负newTable[i]涓簄ull锛岀浜屾while锛宔=b,next=b.next=a锛堣繖閲屾槸鍏抽敭锛屽洜涓虹嚎绋婤宸茬粡鎶奲.next鎸囧悜浜哸锛侊紒锛侊級锛屾墍浠ュ鍒禸涔嬪悗锛岀涓夋while锛宔=a锛宯ext=null锛屽啀娆℃彃鍏锛岃繖鏃跺氨褰㈡垚浜嗕竴涓猘->b->a鐨勭幆锛丆PU鐩存帴鐖嗘弧锛岀▼搴忓穿婧冦€傝繖閲岀粰澶т浆涓€寮犲緢鈥滄竻鏅扳€濈殑鍥撅細鍙﹀header鎻掑叆鏂瑰紡鍦ㄥ绾跨▼鐜涓嬩篃浼氶€犳垚put鑺傜偣涓㈠け銆傝繖閲屾垜灏变笉灞曞紑浜嗐€傜浉姣斾箣涓嬶紝灏鹃儴鎻掑叆娉曚粠灏鹃儴鎻掑叆锛岀幆娌℃湁闂锛屽洜涓烘瘡娆¢兘鏄彃鍏ュ埌灏鹃儴銆俧inalNode[]resize(){...Node[]newTab=(Node[])newNode[newCap];琛?鏂版爣绛撅紱if(oldTab!=null){for(intj=0;je;濡傛灉((e=oldTab[j])!=null){oldTab[j]=null;//璇ヨ妭鐐规病鏈塰ash鍐茬獊锛岀洿鎺ヨ縼绉诲埌鏂拌〃if(e.next==null)newTab[e.hash&(newCap-1)]=e;//绾㈤粦鏍戠粨鏋別lseif(einstanceofTreeNode)((TreeNode)e).split(this,newTab,j,oldCap);//瀛樺湪鍝堝笇鍐茬獊锛屾爲缁撴瀯涓嶆槸绾㈤粦else{//淇濈暀椤哄簭NodeloHead=null,loTail=null;NodehiHead=null,hiTail=null;涓嬩竴涓妭鐐?K,V>锛?/灏鹃儴鎻掑叆鏂规硶copydo{next=e.next;濡傛灉((e.hash&oldCap)==0){濡傛灉(loTail==null)loHead=e;鍚﹀垯loTail.next=e;loTail=e;}else{if(hiTail==null)hiHead=e;鍚﹀垯hiTail.next=e;楂樺熬=e;}}while((e=next)!=null);if(loTail!=null){loTail.next=null;newTab[j]=loHead;}if(hiTail!=null){hiTail.涓嬩竴涓?绌猴紱newTab[j+oldCap]=hiHead;}}}}}returnnewTab;}浣嗘槸杩樻槸浼氬瓨鍦ㄨ妭鐐逛涪澶辩殑闂锛屽彲瑙乭ashmap鏄竴涓嚎绋嬩笉瀹夊叏锛屽洜涓鸿繖涓己鐐癸紝鐜板湪鍦ㄥ绾跨▼鐜涓嬶紝澶氫娇鐢–ocurrentHashMap鍙傝€冿細https://blog.csdn.net/u010257...https://www.jianshu.com/p/0df銆?.https://blog.csdn.net/weixin_...https://blog.csdn.net/u010597...https://blog.csdn.net/qq36846...