当前位置: 首页 > 后端技术 > Java

HashMap_0

时间:2023-04-01 15:15:09 Java

锛岄潰璇曞畼寰堝枩娆㈤棶鐨勫墠瑷€闃跨埜闃跨埜鍋氫簡涓€涓潰璇曪紝闈㈣瘯瀹橀棶濂瑰HashMap鐨勭悊瑙c€?Center>鍥炲幓绛夐€氱煡闈㈣瘯瀹橈細浣犱簡瑙ashMap鍚楋紵璋堣皥浣犲杩欎欢浣滃搧鐨勭悊瑙c€傞樋鐖搁樋鐖革細鍡紝鍏堜粠HashMap鐨勭粨鏋勮璧枫€侶ashMap鏄敱鏁扮粍+閾捐〃+绾㈤粦鏍戠粍鎴愮殑鍝堝笇琛ㄣ€傚垵濮嬮粯璁ゅ閲忎负16锛岃礋杞藉洜瀛愪负0.75銆傚綋閾捐〃鐨勫厓绱犱釜鏁板ぇ浜?鏃讹紝閾捐〃杞寲涓虹孩榛戞爲銆傚綋绾㈤粦鏍戜笂鐨勫厓绱犱釜鏁板噺灏戝埌6鏃讹紝绾㈤粦鏍戝皢閫€鍖栦负閾捐〃銆傞樋鐖搁樋鐖革細HashMap涓昏鏈変袱涓噸瑕佺殑鏂规硶锛宲ut/get銆俻ut鏂规硶鏄贡搴忓悜HashMap涓坊鍔犲厓绱狅紝鍗虫棤娉曚繚璇佸厓绱犵殑鎻掑叆椤哄簭銆俫et鏂规硶鏄幏鍙朒ashMap涓殑鍏冪礌銆傞樋閲屽反宸撮樋閲屽反宸达細杩樻湁涓€涓墿瀹圭殑鏂规硶銆傛墿瀹归槇鍊间负褰撳墠瀹归噺*璐熻浇鐜囷紝姣忔鎵╁鍚庣殑瀹归噺鏄箣鍓嶅閲忕殑涓ゅ€嶃€傞潰璇曞畼锛氬緢濂斤紝杩樻湁鍚楋紵闃跨埜闃跨埜锛氬憙...濂藉儚瀹归噺蹇呴』鏄?鐨勫箓锛屽棷...鍛?..闈㈣瘯瀹橈細濂界殑锛屼粖澶╃殑闈㈣瘯鍏堝埌杩欓噷锛屼綘鍥炲幓绛夐€氱煡鍚ю煒堛€傚HashMap鐞嗚В涓嶆繁锛屾病鏈夊彂鏁g煡璇嗙偣鐨勬€濈淮銆備粖骞达紝璐濆反鍔姏宸ヤ綔锛屽啀娆$害瑙併€?Center>鐜板満鍙憃ffer闈㈣瘯瀹橈細浣犱簡瑙ashMap鍚楋紵璋堣皥浣犲杩欎欢浣滃搧鐨勭悊瑙c€傞樋鐖搁樋鐖革細鍡紝鍏堜粠HashMap鐨勭粨鏋勮璧枫€侶ashMap鏄互Key/Value褰㈠紡瀛樺偍鐨勫搱甯岃〃銆侹ey鍜孷alue閮藉彲浠ヤ负绌恒€傚湪JDK1.7涓紝鐢辨暟缁?閾捐〃缁勬垚銆侸DK1.8鐢辨暟缁?閾捐〃+绾㈤粦鏍戠粍鎴愩€傝繖閲屼富瑕佷粙缁岼DK1.8鐗堟湰鐨凥ashMap銆傚垵濮嬮粯璁ゅ閲忎负16锛岃礋杞藉洜瀛愪负0.75銆傚綋閾捐〃涓婄殑鍏冪礌澶т簬8涓旀暟缁勨€嬧€嬪閲忓ぇ浜?4鏃讹紝閾捐〃浼氬彉鎴愮孩榛戞爲锛屽綋绾㈤粦鏍戜笂鐨勫厓绱犲噺灏戝埌6鏃讹紝绾㈤粦鏍戝皢閫€鍖栦负閾捐〃銆傞樋鐖搁樋鐖革細鏁扮粍鐨勬煡璇㈡晥鐜囨槸O鈥嬧€?1)锛岄摼琛ㄧ殑鏌ヨ鏁堢巼鏄疧鈥嬧€?N)锛岀孩榛戞爲鐨勬煡璇㈡晥鐜囨槸O鈥嬧€?logN)銆侫bbaAbba锛氳繕鏈夛紝HashMap鐨勫閲忓繀椤绘槸2鐨勫箓锛屽鏋滄瀯閫犳柟娉曚腑浼犲叆鐨勫閲忎笉鏄?鐨勫箓锛岄偅涔圚ashMap浼氳皟鐢╰ableSizeFor()鏂规硶鑾峰彇鏈€鎺ヨ繎鐨勫€间紶鍏ョ殑capacity鍜屼竴涓ぇ浜庤緭鍏apacity鐨?娆℃柟鐨勫€硷紝姣斿杈撳叆capacity鏄?7锛宼ableSizeFor()浼氳繑鍥?2銆傞潰璇曞畼锛氫笉閿欎笉閿欍€傞樋鐖搁樋鐖革細HashMap绌哄弬鏁版瀯閫犳柟娉曞垱寤虹殑HashMap瀵硅薄鏄笉浼氬垵濮嬪寲绌洪棿鐨勩€傚綋浣跨敤绌哄弬鏁版瀯閫犳柟娉曞垱寤哄璞℃椂锛孒ashMap浼氬湪绗竴娆℃彃鍏ュ厓绱犳椂鍒濆鍖栫┖闂淬€?/绌哄弬鏋勯€犳柟娉昿ublicHashMap(){this.loadFactor=DEFAULT_LOAD_FACTOR;}闃跨埜闃跨埜锛欻ashMap涓昏鏈変袱涓噸瑕佺殑鏂规硶锛宲ut()/get()锛宲ut()鏂规硶鏄湪HashMap涓贡搴忔坊鍔犲厓绱狅紝鏃犳硶淇濊瘉鍏冪礌鐨勬彃鍏ラ『搴忋€俫et鏂规硶鏄幏鍙朒ashMap涓殑鍏冪礌銆傞樋宸村反闃垮反宸达細鏀句竴涓厓绱犵殑鏃跺€欙紝棣栧厛瑕佽绠梜ey鐨刪ash鍊笺€備负浜嗘洿鍘讳腑蹇冨寲锛孒ashMap鍦ㄨ幏鍙杊ash鍊煎悗锛屽皢hash鍊肩殑楂?6浣嶄笌hash寮傛垨銆傝繑鍥烇紙閿?=绌猴級锛?:(h=key.hashCode())^(h>>>16);闃垮反闃垮反锛氱劧鍚庡垽鏂璈ashMap鏄惁宸茬粡鍒濆鍖栵紝濡傛灉娌℃湁灏卞垵濮嬪寲锛岀劧鍚庢壘鍒版暟缁勪綅缃搴旂殑Key锛屽鏋滆繖涓綅缃病鏈夊厓绱犲氨鐩存帴鎻掑叆銆傚鏋滄湁鍏冪礌锛屽垯鍒ゆ柇key鏄惁涓庡厓绱犵殑key涓€鑷淬€傚鏋滀竴鑷达紝鍒欐柊鍊煎皢鏇挎崲鏃у€笺€傚鏋滄病鏈夛紝缁х画閬嶅巻閾捐〃鎴栬€呯孩榛戞爲銆侫bbaAbba锛氬鏋滈亶鍘嗚繃绋嬩腑鏌愪釜鍏冪礌鐨刱ey涓庤鍏冪礌鐨刱ey涓€鑷达紝鍒欑敤鏂板€兼浛鎹㈡棫鍊硷紝鍚﹀垯灏嗘敼鍙樼殑鍏冪礌鍔犲叆鍒伴摼琛ㄦ垨绾㈤粦鏍戜腑銆侫baba闃垮反宸达細get()鏂规硶鍏堣绠梜ey鐨刪ash鍊硷紝鐒跺悗鍦ㄦ暟缁勪腑鎵惧埌hash瀵瑰簲浣嶇疆鐨勭涓€涓厓绱狅紝鍒ゆ柇key鏄惁涓€鑷淬€傚鏋滀竴鑷达紝鍒欒繑鍥烇紱鍚﹀垯锛岀户缁湪璇ュ厓绱燭ree涓嬪鎵鹃摼琛ㄦ垨绾㈤粦銆傞潰璇曞畼锛氫綘浜嗚ВHashMap鐨勬墿瀹瑰悧锛熼樋宸撮樋宸达細HashMap鐨勬墿瀹逛細璋冪敤resize()鏂规硶銆傛墿瀹归槇鍊兼槸褰撳墠瀹归噺*璐熻浇绯绘暟銆傚鏋滈粯璁ょ殑hashMap瀹归噺涓?6锛岃礋杞藉洜瀛愪负0.75锛屽厓绱犱釜鏁板ぇ浜?2鏃朵細瑙﹀彂鎵╁銆俽esize()杩欎釜鏂规硶浼氬厛鍒ゆ柇HashMap鏄惁鍒濆鍖栥€傚睍寮€鏃讹紝浼氬垱寤轰竴涓柊鏁扮粍锛岀劧鍚庣Щ鍔ㄦ棫鏁扮粍涓殑鍏冪礌銆侸DK1.7HashMap鍦ㄥ苟鍙戝満鏅笅鐨勬墿瀹瑰彲鑳戒細閫犳垚姝诲惊鐜€傞鍗?00%銆傞潰璇曞畼锛氶偅浣犵煡閬撲负浠€涔堥摼琛ㄨ浆绾㈤粦鏍戠殑闂ㄦ鏄?鍚楋紵闃跨埜闃跨埜锛氬搰鍝︼紝杩欎釜锛岃繖涓湪HashMap婧愮爜閲屾湁浠嬬粛銆傜畝鍗曠殑缈昏瘧灏辨槸锛氬綋浣跨敤鍒嗗竷鑹ソ鐨勫搱甯岀爜鏃讹紝寰堝皯浣跨敤鏍戙€傜悊鎯虫儏鍐典笅锛岄殢鏈哄搱甯岀爜閬靛惊娉婃澗鍒嗗竷銆備粠涓婇潰缁欏嚭鐨勬暟鎹潵鐪嬶紝閾捐〃涓湁8涓妭鐐圭殑姒傜巼鏄?.00000006锛屼笉鍒板崈涓囧垎涔嬩竴銆傚綋闃堝€间负8鐨勬椂鍊欙紝宸茬粡寰堝皬浜嗭紝鎵€浠ヨ繖灏辨槸涓轰粈涔堥槇鍊间负8鐨勫師鍥犮€傞潰璇曞畼锛氫綘鍒氭墠璇村湪put()/get()鏂规硶涓紝闇€瑕佸垽鏂厓绱犳槸鍚︿竴鑷淬€傛€庝箞鍒ゆ柇鍏冪礌鏄惁涓€鑷达紵闃跨埜闃跨埜锛氬厛鍒ゆ柇hash鍊兼槸鍚︾浉绛夛紝濡傛灉鐩哥瓑鍐嶈繘琛宔quals()鍒ゆ柇銆傚鏋滀粛鐒剁浉绛夛紝鍒欒涓鸿繖涓や釜鍏冪礌鏄竴鑷寸殑銆傞潰璇曞畼锛氬ソ鐨勶紝鏄庡ぉ鏉ヤ笂鐝€傞樋鐖搁樋鐖革細鍡紝鍐嶈锛佹€荤粨璇存槑浜嗗父鐢ㄧ殑鏂规硶鍜岃繃绋嬶紝浠ュ強娑夊強鍒扮殑涓€浜涚粏鑺傦紝鍙戞暎浜嗕竴浜涚煡璇嗙偣銆傞潰璇曟椂涓嶈鎱屽紶锛岃浣忎互涓嬪叚鐐瑰嵆鍙€?銆佹帴绉嶄簡鐗堟湰锛?.7\1.8鐗堟湰锛?銆佹暟鎹粨鏋勬棤娉曡繍琛岋紙鏁扮粍+閾捐〃+绾㈤粦鏍戯級3銆佸唴缃睘鎬т笉鍙垨缂猴紙鍒濆瀹归噺16锛岃礋杞藉洜瀛?.75锛屾爲闃堝€?,鏍戣浆鎹㈤摼琛ㄩ槇鍊?,鎵╁澶у皬2鍊?4,put/getshouldbekeepinmemory(鐗㈣鍩烘湰鐨刾ut鍜実et杩囩▼)5,鎵╁鏂规硶涓嶈蹇樿(鎵╁鏂规硶涔熻鐭ラ亾process锛屽苟鍙戠幆澧冧笅1.7鐗堟湰鐨勬墿瀹逛細閫犳垚Deadlock锛?.妫辫閮藉浜嗭紙鍜宧ash姣旇緝锛屼负浠€涔堣姣旇緝equals鏂规硶锛屾爲鐨勯槇鍊间负浠€涔堟槸8锛岃兘涓嶈兘key鍜寁alue涓虹┖锛屾墿瀹瑰繀椤昏揪鍒伴槇鍊兼墠鑳芥墿瀹癸級