hashmap常见问题

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()

红黑树与链表时间复杂度?


分享到:


相關文章: