HashMap史上最全面试题
作者:互联网
HashTable和HashMap有啥区别?
HashTable是线程安全的,不允许key为空,方法上加上了同步锁synchronized;
HashMap是线程不安全的,允许存放key为空。
HashMap的key为空数据存放在数组那个位子?
存放到下标为0的位子也就是第一个链表,只能够存放一个为null的key值。
HashMap是否可以存在自定义对象作为key?
可以,hashMap是泛型的。
HashMap1.7和1.8的区别?
1.7底层采用数组+链表结构实现;1.8底层采用数组+链表+红黑树结构
HashMap是如何解决Hash冲突的问题
使用链表存放hash值相等且内容不等,存放到同一个链表中。
HashMap的put方法底层是如何实现的?
1.判断key如果为空的情况下,存放数组0
2.默认HashMap初始容量为16,加载因子大小为16*0.75=12 每次扩容*2倍
3根据key计算hash值,存放到数组下标位子。
4.如果hash值相等,但是内容不同,存放在链表中
5.如果当前size>加载影子阈值,开始*2倍扩容
HashMap的加载因子的值为什么是0.75而不是其他的?
折中的方案,空间利用率高 冲突少 0.75最合适
HashMap根据key查询时间复杂度是多少?
HashMap根据key之计算index值,直接从数组中查询数据。
分两种情况:
1.如果index没有产生冲突,直接获取值,时间复杂度o(1)
2.如果index产生了冲突,遍历链表,时间复杂度为0(n)
HashMap1.8为什么要引入红黑树?
如果index冲突过多,导致链表过长,因为链表时间复杂度为0n。为了解决链表查询速度慢的问题,引入了链表长度大于8并且数组的容量大于64的情况就开始将链表转换红黑树存放,这时候时间复杂度从o(n)变成了o(logn)
HashMap线程不安全,有其他地台方案吗?
1.使用ConcurrentHashMap
2.使用Collections.synchronizedMap(HashMapObject)
红黑树和链表的时间复杂度分别是多少?
红黑树的时间复杂度为o(logn)
链表的时间复杂度为o(n)
标签:HashMap,复杂度,数组,链表,存放,key,史上,试题 来源: https://blog.csdn.net/q15102780705/article/details/105519478