jdk1.7 hashMap 弊端
1、出现死循环+ 数据丢失的问题
如下图所示:
为什么出现死循环, 因为是头插法
为什么不直接将整条单链表的头节点复制过去...
因为: 扩容的目的是为了什么??
扩容的目的是为了使单链表的长度变短,,
2、hashSeed 默认为0
hash算hash值的时候,让hash算法更加复杂,让hash算法的散列性质更高一点
3、jdk1.7 如何避免这种循环链表的发生--> 不发生扩容 加载因子修改
4、多线程hashMap是不是不能用
5、避免hashMap扩容的方法
控制阈值 ,让他不发生扩容
6、modecount ++ 快速失败的容错机制 , 一个线程在遍历,一个线程在修改,因为hashMap本身就不支持多线程所以提供了这个冗错机制
hasMap.put(1,2);
hashMap.put(2,3);
for(String key:hashMap.keySet()){
if(key.equals("1")){// 将key.equals("2") 抛异常了
hashMap.remove(key);
}
}
具体解析:https://www.cnblogs.com/chenkeyu/p/7450431.html
8: hash算法的实现 Integer的静态方法 获取小于当前整数的最小2次幂 ,, 如何保证 bucket桶的下表在 capacity 0-15 之间,, size跟capacity是代表两个不同的值
9: hash冲突是如何解决的,
10:为什么要对高位进行右移,并且对其进行进行异或
11: 对hashtable对整个put方法进行 加锁, 对整个hashtable的整个对象进行加锁,锁的粒度比较大了。。
==》 并发 concurretHashMap 分段锁
【面试篇】ConcurrentHashMap1.7和1.8详解对比 : https://blog.csdn.net/Mind_programmonkey/article/details/111035733