本文将针对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. 扩容会产生死循环,两个线程同时修改一个链表结构,导致产生循环链表。
网友评论