hashmap面试题汇总

2020-05-31 14:25:15 java常见问答 7755

很多时候,一提到map,大家应该都会想都它是Key-Value的集合,那么在map前面加上hash呢?没错就是hashmap,有兴趣的朋友们可以跟小编一起来看看有关hashmap的相关面试题。

第一题:HashMap 里面index 冲突与hash冲突有哪些区别?

答:Index冲突就是应为底层做二进制运算的产生了相同的index,对象不同了,但二进制运算时相同的index,就是对象不同了,但是二进制运算还是相同的index;

Hash冲突了,对象不同但是HashCode是相同的,在HashMap里面为了确保相同的key使用 equals。

第二题:Index冲突了的话会一般存在哪些问题?

答:中会导致值被覆盖掉的,所以在这个时候使用链表解决。

第三题:同一个链表中存放了哪些内容?

答:Index冲突或者hash值冲突。

第四题:HashMap 中链表使用单项还是双向?

答:单项的。

第五题:如何HashMap中链表长度过长会存在哪些问题?

答:会导致整个查询效率降低 ,时间复杂度为O(n)

第六题:HashMapKey为空的情况,底层是如何存放?

答:存放在第一个链表或者数组为0。

第七题:JDK7中HashMap存在哪些问题?

答:HashMap线程不安全 ,链表如果过长导致查询效率降低 ,底层扩容的时候可能存在死循环的问题

第八题:JDK 7中的HashMap 会根据复杂度为多少?

答:这要分两种情况:

一是如果该key没有发生hash冲突的,就可以直接根据key计算index直接从数组中查询,时间复杂度为O(1);

二是如果该key存在Hash冲突了,就会形成一个链表,查询的效率会比较低 时间复杂度为O(n);

Jdk7中的HashMap计算hash值非常均摊,减少了hash值的冲突问题,因为链表的查询效率是非常低的;

JDK里面HashMap 计算Hash 是非常简单的,存在hash冲突的概率比JDK7HashMap 计算的hash要大一些,JAVA8就引用了红黑树;查询效率 是远远大于链表的。

第九题:HashMap默认情况下每次扩容多少倍?

答:每次扩容2倍

第十题:为什么加载因子为0.75而不是其他呢?

答:因为加载因子越大,index下标的冲突概率就也就越大,反而 空间利用率会比较高;

那么加载因子越小 ,index下标冲突概率就也越小,反而是空间利用率不会很高了;

如果说index下标冲突越高,反而查询的成本非常高,反之就非常低了;

这就必须在冲突的机会与空间利用率里面直接寻找一种平衡了。

第十一题:HashMap是否可以存放自定义对象做为key?

答:可以。

第十二题:HashMap默认情况下每次扩容多少倍呢?

答:每次是扩容2倍。

好了,以上就是有关hashmap的所有有关内容了,还想了解更多面试题信息记得多多关注本站消息获取哦。

推荐阅读:

二叉树遍历例题及答案详解,java入门教程

java面试题2017及答案大全详解

java面试题目整理,网易互娱一面