天天看点

HashMap源码解析

HashMap实现了Map接口,继承AbstractMap。其中Map接口定义了键映射到值的规则,而AbstractMap类提供 Map 接口的骨干实现,以最大限度地减少实现此接口所需的工作,其实AbstractMap类已经实现了Map。

我们知道在Java中最常用的两种结构是数组和指针引用。实际上HashMap是一个“链表散列”,如下是它数据结构:

HashMap源码解析

从上图我们可以看出HashMap底层实现还是数组,只是数组的每一项都是一条链。其中参数initialCapacity就代表了该数组的长度。下面为HashMap构造函数的源码://jdk7把有些过程方法put的时候去做了,在读写解析上会体现。

此段代码做了一些变量赋值和参数初始化,早期JDK给table赋值也是在构造器中的,即每次新建一个HashMap时,都会初始化一个table数组。table数组的元素为Entry节点。。

代码中很多思想用到了数学里的一些概念,为了性能优化数据分配平均和合理性的保证。譬如数组大小啥的,都用2的指数来玩,这方面不是很懂,就不献丑了。

下面的get代码比较好理解就不解释了。