HashMap基本原理和优缺点
HashMap基本原理和优缺点
一句话讲, HashMap底层数据结构,JDK1.7数组+单向链表、JDK1.8数组+单向链表+红黑树。
HashMap的3个底层原理
HashMap的3个底层原理
在看过了ArrayList、LinkedList的底层源码后,相信你对阅读JDK源码已经轻车熟路了。除了List很多时候你使用最多的还有Map和Set。接下来我将用三张图和你一起来探索下HashMap的底层核心原理到底有哪些?
这一节我们就不一步一步带着大家看源码,直接通过3张源码原理图,给大家讲解HashMap原理图。有了之前的经验,相信你应该有能力自己看懂原理和自己画图了。
首先你应该知道HashMap的核心方法之一就是put。我们带着如下几个问题来看下图:
*
– hash值计算的算法是什么?就是key.hashCode()吗?
– 默认情况下,put第一个元素时候容量大小是多少?扩容阈值又是多少?
– *hash寻址如何进行的?
如上图所示,put方法调用了putVal方法,之后主要脉络是:
- 第一步调用了hash方法计算hash值。
- 第二步计算容量和扩容
- 第三步创建元素
如何计算hash值?
计算hash值的算法就在第一步,如图所示,对key值进行hashCode()后,对hashCode的值进行无符号右移16位和hashCode值进行了异或操作。为什么这么做呢?其实涉及了很多数学知识,简单的说就是尽可能让高16和低16位参与运算,可以减少hash值的冲突(数据结构算法课中可能叫散列碰撞)。
默认容量和扩容阈值是多少?
如上图所示,很明显第二步回调用resize方法,获取到默认容量为16,这个16在源码里是1<
Original: https://www.cnblogs.com/fanmao/p/15422473.html
Author: _繁茂
Title: JDK成长记7:3张图搞懂HashMap底层原理!
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572620/
转载文章受原作者版权保护。转载请注明原作者出处!