你确定不学一文精通HashMap灵魂七问,错过这些核心知识吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2505个文字,预计阅读时间需要11分钟。
如果你阅读了一篇文章,就能深刻理解HashMap,成为面试官眼中的高手,你学还是不学?别犹豫,开始吧!
如果让你看一篇文章,就可以精通HashMap,成为硬刚面试官的高手,你学还是不学?如果让你看一篇文章,就可以精通HashMap,成为硬刚才面试官的高手,你学还是不学?
别着急,开始之前不如先尝试回来下面几个问题吧:
HashMap的底层结构是什么?
什么时候HashMap中的链表会转化为红黑树?
为什么当链表长度超过8个时候会转化成红黑树?这为什么是8个而不是3个呢?
HashMap是线程安全的嘛?
HashMap为什么是线程不安全的?有哪些具体体现?
ConcurrentHashMap和HashTable是如何实现线程安全的呢?有何不同呢?
一、HashMap底层结构是什么样的?HashMap底层是数组+链表+红黑树组成的复合结构。
数组被分为一个个的桶(bucket),通过哈希值决定键值对在数组中存储的位置;
当键值对的哈希值相同,则以链表形式存储;
当链表长度大于或等于阈值(默认为 8)的时候,如果同时还满足容量大于或等于 MIN_TREEIFY_CAPACITY(默认为 64)的要求,就会把链表转换为红黑树。同样,后续如果删除了元素,当红黑树的节点小于或等于 6 个以后,又会恢复为链表。
本文共计2505个文字,预计阅读时间需要11分钟。
如果你阅读了一篇文章,就能深刻理解HashMap,成为面试官眼中的高手,你学还是不学?别犹豫,开始吧!
如果让你看一篇文章,就可以精通HashMap,成为硬刚面试官的高手,你学还是不学?如果让你看一篇文章,就可以精通HashMap,成为硬刚才面试官的高手,你学还是不学?
别着急,开始之前不如先尝试回来下面几个问题吧:
HashMap的底层结构是什么?
什么时候HashMap中的链表会转化为红黑树?
为什么当链表长度超过8个时候会转化成红黑树?这为什么是8个而不是3个呢?
HashMap是线程安全的嘛?
HashMap为什么是线程不安全的?有哪些具体体现?
ConcurrentHashMap和HashTable是如何实现线程安全的呢?有何不同呢?
一、HashMap底层结构是什么样的?HashMap底层是数组+链表+红黑树组成的复合结构。
数组被分为一个个的桶(bucket),通过哈希值决定键值对在数组中存储的位置;
当键值对的哈希值相同,则以链表形式存储;
当链表长度大于或等于阈值(默认为 8)的时候,如果同时还满足容量大于或等于 MIN_TREEIFY_CAPACITY(默认为 64)的要求,就会把链表转换为红黑树。同样,后续如果删除了元素,当红黑树的节点小于或等于 6 个以后,又会恢复为链表。

