写点什么

hashmap 的底层机制

作者:卢卡多多
  • 2022 年 6 月 09 日
  • 本文字数:657 字

    阅读完需:约 2 分钟



聊聊基础的几个面试题:


很多情况下都会进行技术面试:


技术面试无外乎,基础技术的挖掘和项目场景问题的解决这两个方面:


今天来说两个对接基础面试常用的问题?


hashmap 的数据结构是怎么样的?


这是一个典型的基于 java 集合类型探索底层的数据,也是很多面试官非常喜欢问的问题,一方面这个可以考察你对于 java 集合类的掌握程度,是否熟悉知道如何使用,以及使用的程度,另一个方面可以可以==推理出关于线程,以及 JDK 版本更新过程中的问题接下来我们就细节聊聊


hashmap 的数据结构是 数组+链表的结构,是一个我们熟悉的对于多个元素存储的集合容器


  • 因为有数组(快速的读)+链表(快速的插入元素)----。>使用的效率比较高,key-value 的形式

  • 有自己扩容机制,默认是 capsitry 是 16,负载因子是 0.75,会有一个阈值 threshold,当初始容量*负载因子=阈值,大于这个范围吗,就要考虑扩容,进行 resize 了


在扩容的过程中,JDK1.7 的时候容易出现死循环,但是在 JDK1.8 的时候就修复了


  • JDK1.7 的时候,采用头插法将新的元素会插入链表,再扩容和并发线程的情况下,容易出现当前元素在扩容之前和扩容之后的顺序变化,导致线程并发之后,每次还是会到当前的元素,形成死循环

  • JDK1.8 进行了优化,将插入链表的变成尾插法,这样在扩容的时候也不会改变链表的原来的元素顺序,但是这个集合是线程不安全的


我们这里可以用的是 concurrentHashamp 进行线程并发时候的存储,这个是线程并发安全的,但也只会锁住当前节点的- 底层是 CAS 的,对象锁 sychronzied 的升级


  • hashtable 底层是直接对方法进行一个 数据安全锁(synchronized 的添加)对象锁,性能会比较慢

发布于: 刚刚阅读数: 4
用户头像

卢卡多多

关注

努力寻找生活答案的旅途者 2020.04.12 加入

公众号:卢卡多多,欢迎一起交流学习 2021年度优质创作者

评论

发布
暂无评论
hashmap的底层机制_集合_卢卡多多_InfoQ写作社区