HashMap深度分析

2020-09-21  本文已影响0人  Ben_197e

本文将针对HashMap一下几方面进行深度分析,希望对读者能够有所帮助:

1)HashMap为什么是线程不安全的?

2)HashMap和HashTable的区别

3)1.7和1.8的HashMap实现区别总结

HashMap

1. 允许使用null健和null值,null存储在第一个位置;hashMap的key不能重复;无序;非线程安全;初始容量16,扩容*2;

2. HashTable:不允许null;线程安全;相比HashMap速度慢;适用多线程;初始容量11;

3. 存储结构:

java 1.7: 数组+单链表;头插法(逆序且环形链表死循环问题);

java1.8:数组+单链表+红黑树(当链表节点>8,转成红黑树);尾插法;

4. 线程不安全:

      1. put数据导致多线程数据不一致,两个数据计算得到一样的hash坐标,两个线程同时插入会出现数据不一致。

       2. 扩容会产生死循环,两个线程同时修改一个链表结构,导致产生循环链表。

上一篇下一篇

猜你喜欢

热点阅读