HashMap实现原理

  1. 什么是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值得到这个元素在数组中的位置,将元素从该位置上的链表中取出
  2. 当两个对象的hashcode相同会发生什么?
    答:hashcode相同,说明两个对象HashMap数组的同一位置上,接着HashMap会遍历链表中的每个元素,通过key的equals方法来判断是否为同一个key,如果是同一个key,则新的value会覆盖旧的value,并且返回旧的value。如果不是同一个key,则存储在该位置上的链表的链头【头插法】
  3. 如果两个键的hashcode相同,你如何获取值对象?
    答:遍历HashMap链表中的每个元素,并对每个key进行equal计算,最后通过get方法获取其对应的值对象
  4. 重新调整HashMap大小存在什么问题吗?
    答:两个
    (1)HashMap时添加元素后判断是否达到容量再考虑用不用扩充,如果扩充后不添加就浪费空间
    (2)调整大小过程中如果出现条件竞争可能会发生死循环。这个时因为调整过程采用头插法,map中的数据顺序会反过来,在竞争条件下,根据源码,会发生原来的A->B变成两个A->B和B->A,最终产生A->B->A死循环问题

推荐阅读更多精彩内容