一、核心概念
HashMap是键值对存储容器,底层是数组+链表/红黑树,默认初始容量16、负载因子0.75,元素存满75%就扩容,扩容后容量翻倍,目的是减少哈希冲突、保证操作效率。
二、关键语法&代码示例
1. 基础使用
// 初始化HashMap
HashMap<String, Integer> map = new HashMap<>();
// 存元素
map.put("Java", 100);
map.put("进阶", 90);
map.put("扩容", 80);
// 取元素
System.out.println(map.get("Java")); // 输出100
// 遍历元素
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
2. 扩容关键场景演示
// 自定义初始容量的HashMap
HashMap<String, String> resizeMap = new HashMap<>(2); // 初始容量2,负载因子默认0.75
// 存3个元素,触发扩容(2*0.75=1.5,存第2个就触达阈值,存第3个时扩容)
resizeMap.put("a", "1");
resizeMap.put("b", "2");
resizeMap.put("c", "3");
// 输出扩容后的容量(底层table.length)
System.out.println(getCapacity(resizeMap)); // 输出4(翻倍扩容)
3. 辅助获取容量方法
// 反射获取HashMap实际容量
public static int getCapacity(HashMap<?, ?> map) throws Exception {
Field tableField = HashMap.class.getDeclaredField("table");
tableField.setAccessible(true);
Object[] table = (Object[]) tableField.get(map);
return table.length;
}
三、核心总结
- 初始容量选2的幂次,减少哈希计算冲突;
- 负载因子0.75是效率与空间的平衡,不用轻易改;
- 频繁扩容耗性能,预知数据量时提前设初始容量更高效。