hashMap原理

hashMap是非同步的,即线程不安全。

变为同步有Collection.synchronizeMap() 抑或CurentHashMap类

hashMap为一个数组链表(数组中的每个元素都是一个链表的头结点)    hashcode()对建计算Hash值    equals()发生碰撞时,检测key值是否相同     存储方式为Entry类(即key value存储在一起) 

hashMap的key用Integer,String。因为要计算hashcode值,所以只要final修饰的类都可以作为key。

如果链表的阈值超过6,即将链表转为红黑树。

put(key,value) 首先hash(key)获得数组下标,再调用equals()方法检查Key是否相同。如果key相同则,更新value值。如果不同,则在链表末尾插入Entry(即Entry->next = 新Entry)。

 负载因子为0.75。数组填满75%的时候。就会发生rehasing。即将数组扩大(具体细节,以后再加上来)

rehasing时候的hasing竞争,没搞懂。

  

原文地址:https://www.cnblogs.com/GlazedCat/p/10549024.html