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 的幂。 (我们还在某些操作中允许长度为零,以允许当前不需要的引导机制。)
🍮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 知识浅谈
版权声明: 本文为 InfoQ 作者【知识浅谈】的原创文章。
原文链接:【http://xie.infoq.cn/article/20d452a45d3a49bca20070102】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论