# HashMap åºå±åæ > 以ä¸åºäº JDK1.7 åæã  å¦å¾æç¤ºï¼HashMap åºå±æ¯åºäºæ°æ®åé¾è¡¨å®ç°çãå ¶ä¸æä¸¤ä¸ªéè¦çåæ°ï¼ - 容é - è´è½½å å 容éçé»è®¤å¤§å°æ¯ 16ï¼è´è½½å 忝 0.75ï¼å½ `HashMap` ç `size > 16*0.75` æ¶å°±ä¼åçæ©å®¹(容éåè´è½½å åé½å¯ä»¥èªç±è°æ´)ã ## put æ¹æ³ é¦å ä¼å°ä¼ å ¥ç Key å `hash` è¿ç®è®¡ç®åº hashcode,ç¶åæ ¹æ®æ°ç»é¿åº¦å模计ç®åºå¨æ°ç»ä¸ç index 䏿 ã ç±äºå¨è®¡ç®ä¸ä½è¿ç®æ¯å模è¿ç®æçé«çå¤ï¼æä»¥ HashMap è§å®æ°ç»çé¿åº¦ä¸º `2^n` ãè¿æ ·ç¨ `2^n - 1` åä½è¿ç®ä¸å模ææä¸è´ï¼å¹¶ä¸æçè¿è¦é«åºè®¸å¤ã ç±äºæ°ç»çé¿åº¦æéï¼æä»¥é¾å ä¼åºç°ä¸åç Key éè¿è¿ç®å¾å°ç index ç¸åï¼è¿ç§æ åµå¯ä»¥å©ç¨é¾è¡¨æ¥è§£å³ï¼HashMap ä¼å¨ `table[index]`å¤å½¢æç¯å½¢é¾è¡¨ï¼éç¨å¤´ææ³å°æ°æ®æå ¥å°é¾è¡¨ä¸ã ## get æ¹æ³ get å put 类似ï¼ä¹æ¯å°ä¼ å ¥ç Key 计ç®åº index ï¼å¦æè¯¥ä½ç½®ä¸æ¯ä¸ä¸ªé¾è¡¨å°±éè¦éåæ´ä¸ªé¾è¡¨ï¼éè¿ `key.equals(k)` æ¥æ¾å°å¯¹åºçå ç´ ã ## notice å¨å¹¶åç¯å¢ä¸ä½¿ç¨ `HashMap` 容æåºç°æ»å¾ªç¯ã å¹¶ååºæ¯åçæ©å®¹ï¼è°ç¨ `resize()` æ¹æ³éç `rehash()` æ¶ï¼å®¹æåºç°ç¯å½¢é¾è¡¨ãè¿æ ·å½è·åä¸ä¸ªä¸åå¨ç `key` æ¶ï¼è®¡ç®åºç `index` æ£å¥½æ¯ç¯å½¢é¾è¡¨ç䏿 æ¶å°±ä¼åºç°æ»å¾ªç¯ã  > æä»¥ HashMap åªè½å¨å线ç¨ä¸ä½¿ç¨ï¼å¹¶ä¸å°½éçé¢è®¾å®¹éï¼å°½å¯è½çåå°æ©å®¹ã å¨ `JDK1.8` ä¸å¯¹ `HashMap` è¿è¡äºä¼åï¼ å½ `hash` 碰æä¹ååå ¥é¾è¡¨çé¿åº¦è¶ è¿äºéå¼(é»è®¤ä¸º8)ï¼é¾è¡¨å°ä¼è½¬æ¢ä¸º**çº¢é»æ **ã å设 `hash` å²çªé常严éï¼ä¸ä¸ªæ°ç»å颿¥äºå¾é¿çé¾è¡¨ï¼æ¤æ¶éæ°çæ¶é´å¤æåº¦å°±æ¯ `O(n)` ã 妿æ¯çº¢é»æ ï¼æ¶é´å¤æåº¦å°±æ¯ `O(logn)` ã 大大æé«äºæ¥è¯¢æçã å¤çº¿ç¨åºæ¯ä¸æ¨èä½¿ç¨ [ConcurrentHashMap](https://github.com/crossoverJie/Java-Interview/blob/master/MD/ConcurrentHashMap.md)ã