<aside> 👉🏼 前言
本文也是自己在学习成长中整理笔记,特分享给佬友们笔记内容,如果深入源代码还是需要自己慢慢分析!
</aside>
原贴链接
https://www.lik.cc/archives/hashMap
HashMap 内部主要依赖以下几部分来存储数据:
大白话:
想象一个文件柜(数组),每个抽屉(桶)里可能放着一串文件(链表),而当文件太多时,会用目录索引(红黑树)快速查找。
展示代码图片
代码解释:
// 初始容量,默认 16
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;
// 默认负载因子,控制扩容阈值
static final float DEFAULT_LOAD_FACTOR = 0.75f;
// 链表长度达到8时转换为红黑树
static final int TREEIFY_THRESHOLD = 8;
// 红黑树节点数小于6时退化为链表
static final int UNTREEIFY_THRESHOLD = 6;
// 存储键值对的数组
transient Node<K,V>[] table;
// 当前存储的键值对数量
transient int size;
最佳实践:
当预估数据量较大时,构造时指定合适的初始容量,能有效减少扩容次数,从而提升性能:
Map<String, Integer> map = new HashMap<>(100);