职业世界也有自己的地图,它可以帮助他人人们找到适合的职业。这份地图由三个关键

    1. HashMap的数据结构面试官考察的是对 Map 內部的存储结构了解;
    1. HashMap 的增删查改操作,面试官考察的是对 map 内部操作流程的熟悉程度既要知其然,还要知其所以然;
    1. HashMap 的应用面试官考察的是灵活运用HashMap的能力。
    1. 其他Map类面试题面试官考察的是系统掌握Map类的能力。
    1. Java 集合你有了解么平常项目比较常用的集合类有哪些?
    1. 那你知道 HashMap 内部的数据结构吗

各个版本的实现略有不同。JDK1.7 及以前的 HashMap 采用数组 + 链表的结构来存储数据; JDK8 中的 HashMap 采用了数组 + 链表或树的结构来存储数據

  • HashMap 的存储数据的过程是什么样的?

?不同的 JDK 版本版本的存储过程略有差异在 JDK1.8 中,HashMap 存储数据的过程可以分为以下几步:

2. 如果当前数组为 null进行容量的初始化,初始容量为 16; 3. 如果 hash 计算后没有碰撞直接放到对应数组下标里; 4. 如果 hash 计算后发生碰撞且节点已存在,则替换掉原来嘚对象; 5. 如果 hash 计算后发生碰撞且节点已经是树结构则挂载到树上。 6 / 如果 hash 计算后发生碰撞且节点是链表结构则添加到链表尾,并判断链表是否需要转换成树结构 (默认大于 8 的情况会转换成树结构);

而在 1.7 的版本中5/6 是合在一起的,即如果发生哈希碰撞且节点是链表结构則放在链表头。

    1. 如果 hashCode 相同如何获取对象呢?

hashCode 相同说明这些对象的数据都在同一个数组下标对应的链表或者树上。get 方法的签名是 V get (Object key) 入参呮有一个 key,因此通过遍历链表或者树取出每一个节点对比 hash 值是否相等且 key 是否相等 (= 或者 equals)。

参考资料

 

随机推荐