jdk1.8hashmap常见的面试问题

Posted dudu19939

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk1.8hashmap常见的面试问题相关的知识,希望对你有一定的参考价值。

1.HashMap原理,内部数据结构?

底层使用哈希表(数组加链表)来存储,链表过长会将链表转成红黑树,以实现在O(logn)时间复杂度内查找

2.讲一下HashMap中的put方法过程?

对key求哈希值然后计算下标
如果没有哈希碰撞则直接放入槽中
如果碰撞了以链表的形式链接到后面
如果链表长度超过阈值(默认阈值是8),就把链表转成红黑树
如果节点已存在就替换旧值
如果槽满了(容量*加载因子),就需要resize

3.HashMap中哈希函数是怎么实现的?还有哪些hash实现方式?

高16bit不变,低16bit和高16bit做异或
(n-1)&hash获得下标
还有哪些哈希实现方式?(查资料和博客)

4.HashMap如何解决冲突,讲一下扩容过程。如果一个值在原数组中,扩容后移动到了新数组,位置肯定改变了,如何定位到这个值在新数组中的位置?

将节点加到链表后
容量扩充为原来的两倍,然后对每个节点重新计算哈希值
这个值只可能在两个地方:一种是在原下标位置,另一种是在下标为<原下标+原容量>的位置

5.抛开HashMap,哈希冲突有哪些解决方法?

开放地址法,链地址法

6.针对HashMap中某个Entry链太长,查找的时间复杂度可能达到O(n),如何优化?

将链表转为红黑树,JDK1.8已经实现










以上是关于jdk1.8hashmap常见的面试问题的主要内容,如果未能解决你的问题,请参考以下文章

JDK1.8HashMap底层实现原理

JDK1.8HashMap底层实现原理

JDK1.8HashMap底层实现原理

HashMap ConcurrentHashMap解读

HashMap源码分析--jdk1.8

十个常见的面试问题