ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HashMap常见面试题总结(持续更新)

2021-03-12 15:07:26  阅读:112  来源: 互联网

标签:总结 面试题 Hash HashMap Hashcode 链表 索引 null


HashMap

1.HashMap的原理

HashMap是一种集合,继承于Map接口,它的底层是由数组和链表组成的,存储的元素为Entry<K,V>键值对。一个HashMap只允许一个Key为null值,但是允许多个Value为null值。它存储元素主要依赖于Hashcode值,通过对Hashcode进行取高位运算然后与自身进行异或,再通过对数组长度进行取模得到索引位置,得到索引位置后判断是否为null值,如果是null就直接插入,如果不是就遍历链表,看是否存在相同的Key值,存在就更新Value值,不存在就从头部插入新元素,插入后还需判断是否结点数超过8个,超过8个需要转换为红黑树。

2.如何解决Hash冲突

java中解决Hash冲突是依赖于链接法。得到索引位置后,如果这时候已经有结点存在,就需要遍历当前索引的链表,看是否存在相同的Key值,存在就更新Value值,不存在就从头部插入新元素,插入后还需判断是否结点数超过8个,超过8个需要转换为红黑树。

3.HashMap的缺点

HashMap主要是依赖于Hashcode值,它在提供超快速的查询效率时也存在一些不好的地方。如果定义一个新类时重新的Hashcode方法不恰当就很容易产生以下两种情况。

  • 所有元素的Hashcode值都一样,这就导致了对应索引处的链表非常的长,查询效率慢,但是后面引进的红黑树针对这种现象提供了很大的优化。
  • 所有元素Hashcode对应的索引值都不相同,这就导致HashMap很容易扩容,造成内存的浪费和进行扩容操作时的不必要开销。

HashMap需要额外计算一次Hash值,如果一开始HashMap的容器大小制定不合适,resize操作会使它多次额外计算Hash值。

标签:总结,面试题,Hash,HashMap,Hashcode,链表,索引,null
来源: https://blog.csdn.net/zZhu_XH/article/details/114693872

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有