- [HashMapä»ç»](https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653191907&idx=1&sn=876860c5a9a6710ead5dd8de37403ffc&chksm=8c990c39bbee852f71c9dfc587fd70d10b0eab1cca17123c0a68bf1e16d46d71717712b91509&scene=21#wechat_redirect) 1. Javaä¸çæ°æ®ç»ææ£å表ï¼ç»æä¸ºæ°ç»éé¢å¥ä¸ä¸ªé¾è¡¨ï¼æ¯ä¸ä¸ªæ°ç»å ç´ çå 容é½ä¸ºä¸ä¸ªé¾è¡¨ç头æéï¼ 2. æå ¥æ¶éç¨å¤´ææ³ï¼å 为HashMapç设计è 认为åæå ¥çæ°æ®è¢«æ¥è¯¢çå¯è½æ§æ´å¤§ 3. HashMapä¸hash彿°ç设计ï¼ä¸åäºç´æ¥å模è¿ç®ï¼èæ¯éç¨ä½è¿ç®çæ¹å¼ï¼ææåæ ·ä¸ºåæ¨¡ï¼ä½æ¯æ§è½æ´å¥½ 4. HashMapçé»è®¤é¿åº¦ä¸º16ï¼è®¾ç½®HashMapçé¿åº¦æ¶ä¸è¬è®¾ç½®ä¸º2ç广¬¡ï¼å ä¸ºå¦æè®¾ç½®ä¸º10çè¯æäºindexä¼é«é¢äº®ç¸ï¼ä½æ¯æäºindexå´åä¸å°ï¼è¿åäºhash彿°è¦åååå¸ç设计åè¡· 5. HashMap为ä¿åé®å¼å¯¹çæ°æ®ç»æï¼æ¯ä¸ä¸ªé®å¼å¯¹ä¹å«åEntryï¼è¿äºä¸ªé®å¼å¯¹ï¼Entryï¼åæ£åå¨å¨ä¸ä¸ªæ°ç»å½ä¸ï¼è¿ä¸ªæ°ç»å°±æ¯HashMapç主干 6. HashMapæ°ç»çæ¯ä¸ä¸ªå ç´ ä¸æ¢æ¯ä¸ä¸ªEntry对象ï¼ä¹æ¯ä¸ä¸ªé¾è¡¨ç头èç¹ 7. 设æ³ä¸çindexè®¡ç®æ¹æ³ï¼å模è¿ç®ï¼ï¼index = HashCodeï¼Keyï¼ % Length 8. å®é ä¸çindexè®¡ç®æ¹æ³ï¼ä½è¿ç®ï¼ï¼index = HashCodeï¼Keyï¼ & ï¼Length - 1ï¼ ï¼**Hashç®æ³æç»å¾å°çindexç»æï¼å®å ¨åå³äºKeyçHashcodeå¼çæåå ä½ã**ï¼ 9. HashMapæ¯ä¸ä¸ªEntryå¯¹è±¡çæ°ç»ãæ°ç»ä¸çæ¯ä¸ä¸ªEntryå ç´ ï¼åæ¯ä¸ä¸ªé¾è¡¨ç头èç¹ - [é«å¹¶åä¸çHashMap](https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653192000&idx=1&sn=118cee6d1c67e7b8e4f762af3e61643e&chksm=8c990d9abbee848c739aeaf25893ae4382eca90642f65fc9b8eb76d58d6e7adebe65da03f80d&scene=21#wechat_redirect) 1. HashMapå¨æå ¥å ç´ è¿å¤çæ¶åéè¦è¿è¡Resizeï¼Resizeçæ¡ä»¶æ¯**HashMap.Size >= Capacity * LoadFactor**ã 2. HashMapçResizeå å«**æ©å®¹**å**ReHash**两个æ¥éª¤ï¼ReHashå¨å¹¶åçæ åµä¸å¯è½ä¼å½¢æé¾è¡¨ç¯ã 3. æ©å®¹ä¸å¦çè¡¡éæ åæ¯**主干**ï¼å³**Entry[]**ï¼çé¿åº¦æ¯å¦è¾¾å°ç»å®é¿åº¦ç0.75 - [ConcurrentHashMap](https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653192083&idx=1&sn=5c4becd5724dd72ad489b9ed466329f5&chksm=8c990d49bbee845f69345e4121888ec967df27988bc66afd984a25331d2f6464a61dc0335a54&scene=21#wechat_redirect) 1. HashMap䏿¯çº¿ç¨å®å ¨çãå¨é«å¹¶åç¯å¢ä¸åæå ¥æä½ï¼æå¯è½åºç°ä¸é¢çç¯å½¢é¾è¡¨ 2. äºçº§åå¸è¡¨ 3. 主干为Segment[]ï¼Segmentæ¬èº«å°±ç¸å½äºä¸ä¸ªHashMap对象ï¼åHashMap䏿 ·ï¼Segmentå å«ä¸ä¸ªHashEntryæ°ç»ï¼æ°ç»ä¸çæ¯ä¸ä¸ªHashEntryæ¢æ¯ä¸ä¸ªé®å¼å¯¹ï¼ä¹æ¯ä¸ä¸ªé¾è¡¨ç头èç¹ 4. **éåæ®µææ¯**ï¼æ¯ä¸ä¸ªSegmentå°±ç¸å½äºä¸ä¸ªé«åº¦èªæ²»çç¹åºï¼è½å¤é«åº¦èªä¸»çè¿è¡è¯»åæä½ï¼SegmentåSegmentä¹é´äºä¸å½±å 5. ConcurrentHashMapå½ä¸æ¯ä¸ªSegmentåèªææä¸æéãå¨ä¿è¯çº¿ç¨å®å ¨çåæ¶éä½äºéçç²åº¦ï¼è®©å¹¶åæä½æçæ´é« 6. é½éè¦äºæ¬¡å®ä½ - hash䏿¬¡å®ä½å°Segment[]å½ä¸çå ·ä½index对åºçSegmentï¼Segment对象ä¸ä¸ºHashEntry[] - åhash䏿¬¡å®ä½å°HashEntry[]ä¸å ·ä½çindex对åºçå ·ä½Entry对象 7. sizeæ¹æ³ç»è®¡åå¸è¡¨ä¸çæ»å ç´ æ°éæ¯éç¨äº**å ä¹è§éåæ²è§é**çè®¾è®¡ææ³ 8. ConcurrentHashMapçPutæ¹æ³åGetæ¹æ³ç¸æ¯ï¼å¤äºä¸¤ä¸ªæ¥éª¤ï¼**è·åéç¨é**å**éæ¾é**ï¼å ·ä½çPutçæ¹æ³çé»è¾å¦ä¸ï¼ - 为è¾å ¥çKeyåHashè¿ç®ï¼å¾å°hashå¼ - éè¿hashå¼ï¼å®ä½å°å¯¹åºçSegment对象 - è·åå¯éå ¥é - 忬¡éè¿hashå¼ï¼å®ä½å°Segmentå½ä¸æ°ç»çå ·ä½ä½ç½® - æå ¥æè¦çHashEntry对象ã - éæ¾é 9. size()æ¹æ³ä¸ç大è´é»è¾å¦ä¸ï¼ - éåææçSegment - æSegmentçå ç´ æ°éç´¯å èµ·æ¥ - æSegmentçä¿®æ¹æ¬¡æ°ç´¯å èµ·æ¥ - 夿ææSegmentçæ»ä¿®æ¹æ¬¡æ°æ¯å¦å¤§äºä¸ä¸æ¬¡çæ»ä¿®æ¹æ¬¡æ°ã妿大äºï¼è¯´æç»è®¡è¿ç¨ä¸æä¿®æ¹ï¼éæ°ç»è®¡ï¼å°è¯æ¬¡æ°+1ï¼å¦æä¸æ¯ãè¯´ææ²¡æä¿®æ¹ï¼ç»è®¡ç»æ - 妿å°è¯æ¬¡æ°è¶ è¿éå¼ï¼å对æ¯ä¸ä¸ªSegmentå éï¼åéæ°ç»è®¡ - 忬¡å¤æææSegmentçæ»ä¿®æ¹æ¬¡æ°æ¯å¦å¤§äºä¸ä¸æ¬¡çæ»ä¿®æ¹æ¬¡æ°ãç±äºå·²ç»å éï¼æ¬¡æ°ä¸å®å䏿¬¡ç¸ç - éæ¾éï¼ç»è®¡ç»æ **注æï¼å¯¹äºä»¥ä¸çåå¸è¡¨ï¼sizeæ¹æ³æ¯è·åå½ä¸çå ç´ ä¸ªæ°ï¼ä¹å°±æ¯é®å¼å¯¹å¯¹è±¡ç个æ°** 