Java LinkedHashMap
提示
- LinkedHashMap 的基本特性:
LinkedHashMap
类是 Java 集合框架的一部分,提供了基于哈希表和链表的Map
接口实现。它通过内部维护的双向链表来保持条目的插入顺序。 - 创建和使用 LinkedHashMap:可以通过指定初始容量和负载因子来创建
LinkedHashMap
,并可选择条目排序方式(插入顺序或访问顺序)。它支持常见的映射操作,如put()
,get()
,remove()
, 和clear()
等。 - LinkedHashMap 与 HashMap 的差异:与
HashMap
相比,LinkedHashMap
额外维护元素的顺序,因此占用更多内存并可能有稍慢的性能。然而,它可以保证元 素的迭代顺序与插入顺序一致。
Java 集合框架的 LinkedHashMap
类提供了 Map 接口的哈希表和链表实现。
LinkedHashMap
接口扩展了 HashMap 类,以在哈希表中存储其条目。它在所有条目之间内部维护一个双向链表,以对其条目进行排序。
创建 LinkedHashMap
为了创建一个链接哈希映射,我们首先必须导入 java.util.LinkedHashMap
包。一旦我们导入了包,以下是我们在 Java 中创建链接哈希映射的方法。
// 初始容量为 8 和负载因子为 0.6 的 LinkedHashMap
LinkedHashMap<Key, Value> numbers = new LinkedHashMap<>(8, 0.6f);
在上面的代码中,我们创建了一个名为 numbers
的链接哈希映射。
这里,
Key
- 用于关联映射中每个元素(值)的唯一标识符Value
- 映射中由键关联的元素
注意 new LinkedHashMap<>(8, 0.6)
这部分。这里,第一个参数是 容量,第二个参数是 负载因子。
- 容量 - 这个链接哈希映射的容量是 8。意味着它可以存储 8 个条目。
- 负载因子 - 这个链接哈希映射的负载因子是 0.6。这意味着,每当我们的哈希映射填充到 60% 时,条目就会被移动到一个新的哈希表中,该哈希表的大小是原哈希表的两倍。
默认容量和负载因子
我们可以创建一个没有定义容量和负载因子的链接哈希映射。例如,
// 默认容量和负载因子的 LinkedHashMap
LinkedHashMap<Key, Value> numbers1 = new LinkedHashMap<>();
默认情况下,
- 链接哈希映射的容量将是 16
- 负载因子将是 0.75
注意:LinkedHashMap
类还允许我们定义其条目的顺序。例如
// 指定顺序的 LinkedHashMap
LinkedHashMap<Key, Value> numbers2 = new LinkedHashMap<>(capacity, loadFactor, accessOrder);
这里,accessOrder
是一个布尔值。其默认值为 false
。在这种情况下,链接哈希映射中的条目按照它们的插入顺序排序。
然而,如果传递 true
作为 accessOrder
,则链接哈希映射中的条目将按照最近最少访问到最近最多访问的顺序排序。
从其他映射创建 LinkedHashMap
以下是我们如何创建包含其他映射所有元素的链接哈希映射。
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
// 创建偶数的 LinkedHashMap
LinkedHashMap<String, Integer> evenNumbers = new LinkedHashMap<>();
evenNumbers.put("Two", 2);
evenNumbers.put("Four", 4);
System.out.println("LinkedHashMap1: " + evenNumbers);
// 从其他 LinkedHashMap 创建 LinkedHashMap
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>(evenNumbers);
numbers.put("Three", 3);
System.out.println("LinkedHashMap2: " + numbers);
}
}
输出
LinkedHashMap1: {Two=2, Four=4}
LinkedHashMap2: {Two=2, Four=4, Three=3}