Hashmap和ConcurrentHashMap的底层原理

HashMap:

1.HashMap底层使用数组加链表加红黑树实现

2.初始化大小:16 必须是2的幂次方

3.加载因子0.75,树华因子8,非树华因子是6

4.扩容过程,当元素放置够12个时,或者单链够8个时,进行扩容,扩容需要先创建一个新的数组,再通过重新计算Hash值的方式,来判断元素应该再高位还是低位。

5.树华过程,当元素单链表超过8个元素,同时容器的大小不小于64,进行树华,将量表树华成一个红黑树。

6.HashMap插入方式:在JAVA1.8使用头插法,在JAVA1.7使用尾插法

7.HashMap为什么容器大小必须是2的幂:方便计算桶位置,方便rehash

ConcurrentHashMap:

1.ConcurrentHashMap底层实现与Hashmap一致,但是在涉及多线程操作时,引入了CAS+Synchronized关键字,来保证线程安全。

2.JAVA1.7使用分段锁,JAVA1.8使用CAS+Synchronize

上一篇:java基础-5


下一篇:说一说HashMap的底层实现