HashMap源码分析(一)

时间:2022-10-19 10:57:32

HashMap源码分析(一)

???? 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家

???? 擅长领域:全栈工程师、爬虫、ACM算法

???? 公众号:知识浅谈

HashMap源码分析(一)总结 正菜来了⛳⛳⛳

????HashMap中的变量

????DEFAULT_INITIAL_CAPACITY

​static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;​含义:这默认的初始容量为16.

????MAXIMUM_CAPACITY

​static final int MAXIMUM_CAPACITY = 1 << 30;​含义:最大容量,如果一个更高的值由任何一个带参数的构造函数隐式指定时使用。必须是 2 <= 1<<30 的幂。

????DEFAULT_LOAD_FACTOR

含义:构造函数中未指定时使用的负载因子。 ​​static final float DEFAULT_LOAD_FACTOR = 0.75f;​

????TREEIFY_THRESHOLD

含义:使用树而不是列表的 bin 计数阈值。将元素添加到至少具有这么多节点的 bin 时,bin 将转换为树。该值必须大于 2 并且应该至少为 8,以便与树移除中关于在收缩时转换回普通 bin 的假设相吻合。就是把列表转换为树的时候的的节点数。 ​​static final int TREEIFY_THRESHOLD = 8;​

????UNTREEIFY_THRESHOLD

含义:在调整大小操作期间 untreeifying(拆分)bin 的 bin 计数阈值。应小于 TREEIFY_THRESHOLD,并且最多 6 以在移除时进行收缩检测,当树的节点数变为6的时候,树转化为节点。 ​​static final int UNTREEIFY_THRESHOLD = 6;​

????MIN_TREEIFY_CAPACITY

含义: 可对其进行树化的 bin 的最小表容量。 (否则,如果 bin 中有太多节点,则调整表的大小。)应至少为 4 TREEIFY_THRESHOLD 以避免调整大小和树化阈值之间的冲突。 ​​static final int MIN_TREEIFY_CAPACITY = 64;​​ 这个的含义是当Map中的数组中的个数小于64的时候是不能进行数组到树结构的转化的。只有Map中的元素个数超过了64才有可能链表转化为树形结构。

????Node<K,V>[] table;

含义:该表在首次使用时初始化,并根据需要调整大小。分配时,长度始终是 2 的幂。 (我们还在某些操作中允许长度为零,以允许当前不需要的引导机制。)

transient Node<K,V>[] table;

????Set<Map.Entry<K,V>> entrySet

含义:保存缓存的 entrySet()。请注意,AbstractMap 字段用于 keySet() 和 values()。 ​​transient Set<Map.Entry<K,V>> entrySet;​

????int size

含义:此映射中包含的键值映射的数量。 ​​transient int size;​

????int modCount;

含义: 此 HashMap 已被结构修改的次数 结构修改是指更改 HashMap 中的映射数量或以其他方式修改其内部结构(例如,重新散列)的那些。该字段用于使 HashMap 的 Collection-views 上的迭代器快速失败.,这个就是我们在遍历的时候,如果对hashMap进行修改,这个modCount就会发生改变的,就会抛出异常。 ​​transient int modCount;​

????int threshold;

含义:要调整大小的下一个大小值(容量负载因子)。

????float loadFactor;

含义:hash表的加载因子。 ​​final float loadFactor;​

????总结

以上就是关于HashMap中的成员变量的的部分解析,希望有所帮助。Written By ​​知识浅谈​