HashMap 中 get,put 方法源码实现

HashMap 是Map接口的一个实现类

1、线程 HashMap 非线程安全
2、数据存储结构 hashMap采用Entity数组来存储 key-value对,每一个键值对组成一个Entity,键值对均允许为Null
3、数据结构 数组+链表(JDK1.7之前);数组+链表+红黑树(JDK1.8新增)
4、链表与红黑树之间的转换 数据类型转换的阈值,链表长度超过8的阈值后,就将链表结构转成红黑树结构,当红黑树结构长度阈值小于6,自动转成链表
5、 负载因子 0.75
6、初始化数组容量大小 hashMap初始Entity[]数组容量16,当容量达到阈值后,扩充的容量为bable的2倍,重新计算hash值

HashMap方法

1、HashMap继承结构 AbstractMap是Map的实现类,HashMap通过继承AbstractMap实现部分Map方法。

  HashMap 中 get,put 方法源码实现

2、get(key) HashMap在获取值时,首先通过Key计算Hash值,获取表数据,根据hash值定位Entity元素,根据key值获取相应的value值。

  HashMap 中 get,put 方法源码实现

3、put(key,value)同样先通过Key计算出hash值,作为数组的下标;首先获取内存中的数据,然后做了一系列的逻辑判断。
  这里增加了一个红黑树转换的判断。 if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st

  HashMap 中 get,put 方法源码实现

上一篇:微信JSSDK使用步骤(用于在微信浏览器中自定义分享,分享到朋友圈,拍照,扫一扫等功能)


下一篇:Umbraco(3) - CSS & Javascript(翻译文档)