Java常用类库(Collection集合)

 HashMap、HashTable、ConccurentHashMap

HashMap(Java8以前):数组和链表

HashMap(Java8之后):数组和链表和红黑树,转为红黑树的条件是:1.链表长度到8 ,2.数组长度到64

HashMap:put方法的逻辑

Java常用类库(Collection集合)

 

HashMap:如何有效减少碰撞?

扰动函数:促使元素位置分布均匀,减少碰撞机率

使用final对象,并采用合适的equals()和hashCode()

hash值运算过程:

先将hashCode左移16位,高位和低位进行异或,再与(n-1)

与(n-1)的操作和%len的操作结果一致,但更为高效

Java常用类库(Collection集合)

HashMap:扩容的问题

多线程环境下,调整大小可能会存在条件竞争,容易造成死锁

rehashing(将旧hash放到新hash中)是一个比较耗时的过程