写点什么

HashMap 源码分析 (一)

作者:知识浅谈
  • 2022-10-19
    吉林
  • 本文字数:1179 字

    阅读完需:约 1 分钟


🍁 作者:知识浅谈,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 知识浅谈

发布于: 刚刚阅读数: 4
用户头像

知识浅谈

关注

公众号:知识浅谈 2022-06-22 加入

🍁 作者:知识浅谈,InfoQ签约作者,CSDN博客专家/签约讲师,华为云云享专家,阿里云签约博主,51CTO明日之星 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥 联系方式vx:zsqtcc

评论

发布
暂无评论
HashMap源码分析(一)_hashmap_知识浅谈_InfoQ写作社区