HashMap介绍

HashMap

非线程安全

数据结构:
[] 数组+链表
存入值是先按照(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)计算hash值,然后找到数组对应的下标,按照逻辑存入到对应的数组元素里

数组扩容条件:
数组容量超过数组长度*加载因子的乘积进行扩容,重新计算每个key在数组中的位置,刷新存储

链表转红黑树条件:
jdk1.8 引进红黑树 TREEIFY_THRESHOLD=8 MIN_TREEIFY_CAPACITY=64
链表长度>=8 数组长度>=64 对这个hash值下的链表转红黑树

hash计算方式:
key值hash计算:(key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)

containsKey(Object key)和get(Object key)实际上一个逻辑,内层都调用的getNode(int hash, Object key)方法,知识containsKey在返回值转为boolean类型

你可能感兴趣的:(HashMap介绍)