HashMap
extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
-
容器实体
// 桶数组
transient Node<K,V>[] table;
-
参数字段和静态常数
展开
-
loadFactor
- 负载因子,默认0.75
- 负载因子越高时间效率越低,空间效率越高
- 表示预期的每个桶的元素的平均数量
- 因为hash会发生碰撞、分布不均匀,如果这个值接近1,那就说明有些桶的元素大于1,需要用到链表或者树,查询效率就不是O(1)了
-
tableLength
- 桶数组(表)的长度
-
threshold
- 当前允许最大的容量(节点的个数):tableLength*loadFactor
-
size
- 键值对,节点个数
-
modCount
- 记录HashMap内部结构发生变化的次数
-
DEFAULT_LOAD_FACTOR = 0.75f
- 默认负载因子,当元素个数大于0.75*桶长度时扩容
-
TREEIFY_THRESHOLD = 8
- 链表树化的阈值,桶的元素大于8树化
-
DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
- 初始化的桶长度:16
-
MIN_TREEIFY_CAPACITY = 64;
- 最小树化容量,树化时如果桶长度<64要先扩容,不树化,防止出现很长的桶
散列方法
-
目的
增加散列后的随机性,然后把散列后的值对数组长度取模
-
优化