HashMap原理及源码解析

https://www.bilibili.com/video/av73968282?from=search&seid=1400532295507095115

周瑜老师讲的很好

1、hashMap机制

     1.1、jdk1.7

             数组(entity)+链表。

             1.1.1、根据key计算hashCode值,然后对hashCode进行高位运算,最后和数组长度(初始容量)-1进行与运算,得到entity的存储位置。

             1.1.2、多个对象的key计算出来的存储位置有可能一样,就是hash碰撞,这个时候就在相同的位置增加链表,链表扩容采用的是头插法,这样插入效率很高。

             1.1.3、当key为null的时候,这个是指定位置的,就放在entity的第一个下标位置。

                        当相同的key的时候就会替换value的值,同时把oldValue返回。

                        初始容量的时候,是2的N次方,主要是在后期的hashCode的 &运算的时候,增强散列性。比如如果是0001 0000减去就是0000 1111,这样进行位运算就                  取决于hashCode的位运算之后的值。如果指定初始容量是10,那么初始容量就是最接近10的2的N次方,16

                        

      1.2、jdk1.8

            数组+链表+红黑树

   

猜你喜欢

转载自www.cnblogs.com/dsxStudyNote/p/11804485.html