hashMap与hashtable区别?
1.hashMap非线程安全,hashtable线程安全 ,synchronized
2.hashMap允许key=null,value=null 值,hashtable不允许key=null,value=null 值
hashMap key为空存在那个位置?
1.0,数组的第一个位置
hashMap是否可以用自定义对象作为key?
可以,但是对象要实现equls和toString方法。
hashMap1.7与hashMap1.8区别?
hashMap1.7数组+链表
hashMap1.8数组+链表+红黑树
hashMap解决冲突?
链表存储hash一样,内容不一样的,
put怎么实现的?
1.key是不是null ,0
2.key 计算hash,存放下标位置。
3.0.75加载因子,扩容前16,阈值16*0.75=12,扩容后16*2=32,扩容2倍。
备注:
hashMap1.8如果链表长度>8,链表转换成红黑树。
加载因子为什么是0.75?
空间和效率和冲突的折中
hashMap1.7数组扩容死循环的问题,为什么会发生?
put的时候头插入法,多线程的时候,产生死循环。如,线程1操作第一个,指向第二个,线程2操作第二个,指向第一个,死循环产生。
hashMap 根据key查询时间复杂度是多少?
不冲突的时候O(1)
冲突的时候O(log(n))
hashMap1.8比hashMap1.7改进哪些地方?
1.链表采用尾插入法。
2.链表长度>8 转红黑树
3.解决死循环问题。
hashMap 1.8为什么要引入红黑树?
index冲突过多,导致链表过长,因为链表时间复杂度为On ,为了解决查询效率慢,这时候,链表长度>8的情况下,且数组容量大于64的情况下,就开始将链表转换为红黑树存放。解决效率的为题
hashMap线程线程不安全,替代品?
concurentHashMap,Collections.synchronizedMap()
红黑树与链表时间复杂度?
閱讀更多 魔都小老表vlog 的文章
關鍵字: 死循环 hashMap1.8 常见问题