精通 Java LinkedHashMap:创建、操作与性能对比
精通 Java LinkedHashMap:创建、操作与性能对比
通过实战示例与最佳实践,学习如何创建、操作并对比 Java LinkedHashMap。
Java 集合框架中的 LinkedHashMap 类结合了哈希表的快速查找与可预测的迭代顺序,得益于内部维护的双向链表,保留插入顺序或访问顺序。
创建 LinkedHashMap
导入 java.util.LinkedHashMap 并实例化。构造器接受初始容量、负载因子及可选的 accessOrder 标志。
// 初始容量 8、负载因子 0.6 的 LinkedHashMap
LinkedHashMap<Key, Value> numbers = new LinkedHashMap<>(8, 0.6f);
参数:
- capacity — 桶数量;默认 16。
- loadFactor — 表填充 60% 时触发扩容;默认 0.75。
- accessOrder —
false为插入序,true为最近最少访问至最近最多访问序。
默认设置示例:
LinkedHashMap<Key, Value> defaultMap = new LinkedHashMap<>();
从现有 Map 创建 LinkedHashMap
将现有 Map 复制到 LinkedHashMap 以保留顺序:
LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>();
evenNumbers.put("Two", 2);
evenNumbers.put("Four", 4);
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(evenNumbers);
numbers.put("Three", 3);
输出:
LinkedHashMap1: {Two=2, Four=4}
LinkedHashMap2: {Two=2, Four=4, Three=3}
核心操作
插入元素
put(key, value)— 添加或替换映射。putIfAbsent(key, value)— 键缺失时才添加。putAll(map)— 合并另一个 Map。
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
numbers.put("One", 1);
numbers.putIfAbsent("Two", 2);
numbers.putAll(evenNumbers);
访问元素
获取键、值或条目:
entrySet()— 所有键值对。keySet()— 所有键。values()— 所有值。get(key)— 获取值,缺失返回null。getOrDefault(key, default)— 带默认值的安全获取。
int val = numbers.get("Three");
int def = numbers.getOrDefault("Five", 5);
移除元素
remove(key)— 按键删除。remove(key, value)— 仅当值匹配时删除。clear()— 清空 Map。containsKey(key)— 存在性检查。containsValue(value)— 存在性检查。size()— 条目数。isEmpty()— 空判断。
LinkedHashMap 与 HashMap 对比
- LinkedHashMap 保留插入序或访问序;HashMap 无序。
- LinkedHashMap 额外维护节点链接,内存开销稍大。
- LinkedHashMap 迭代略慢,但提供可预测的顺序。
java
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java if…else:控制流全解析
- 精通 Java 增强 for 循环:语法、示例与最佳实践
- Java break 语句:用法、时机与标签 break 详解
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 匿名内部类:定义、语法与实战示例
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
- 深入理解 Java Vector:用法、特性及与 ArrayList 的对比