- 什么是HashMap?实现原理是什么?
答:HashMap是基于哈希表的Map接口的非同步实现,它允许null键和null值,且HashMap依托于它的数据结构的设计,存储效率特别高,这是我用它的原因
原理:HashMap是基于hash算法实现的,通过put(key,value)存储对象到HashMap中,也可以通过get(key)从HashMap中获取对象。当我们使用put的时候,首先HashMap会对key的hashCode()的值进行hash计算,根据hash值得到这个元素在数组中的位置,将元素存储在该位置的链表上。当我们使用get的时候,首先HashMap会对key的hashCode()的值进行hash计算,根据hash值得到这个元素在数组中的位置,将元素从该位置上的链表中取出 - 当两个对象的hashcode相同会发生什么?
答:hashcode相同,说明两个对象HashMap数组的同一位置上,接着HashMap会遍历链表中的每个元素,通过key的equals方法来判断是否为同一个key,如果是同一个key,则新的value会覆盖旧的value,并且返回旧的value。如果不是同一个key,则存储在该位置上的链表的链头【头插法】 - 如果两个键的hashcode相同,你如何获取值对象?
答:遍历HashMap链表中的每个元素,并对每个key进行equal计算,最后通过get方法获取其对应的值对象 - 重新调整HashMap大小存在什么问题吗?
答:两个
(1)HashMap时添加元素后判断是否达到容量再考虑用不用扩充,如果扩充后不添加就浪费空间
(2)调整大小过程中如果出现条件竞争可能会发生死循环。这个时因为调整过程采用头插法,map中的数据顺序会反过来,在竞争条件下,根据源码,会发生原来的A->B变成两个A->B和B->A,最终产生A->B->A死循环问题
HashMap实现原理
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 本篇所述源码基于JDK1.8.0_121 在写上一篇线性表的文章的时候,笔者看的是Android源码中suppor...
- 0. 前言 HashMap 是面试中面试官常问的问题之一,几乎所有的程序员都用它,因为HashMap考察的深度很深...
- 本文参考至Java 8系列之重新认识HashMap。对于原文中的hash算法和jdk8对于扩容机制的优化等复杂内容...