📜  java中的linkedhashmap (1)

📅  最后修改于: 2023-12-03 14:42:54.964000             🧑  作者: Mango

Java中的LinkedHashMap

LinkedHashMap是Java中的一种特殊HashMap。它保留了插入顺序,并且还提供了按访问顺序排序的迭代器。在这篇文章中,我们将介绍如何在Java中使用LinkedHashMap。

创建LinkedHashMap

创建LinkedHashMap与创建HashMap非常相似,只需将HashMap替换为LinkedHashMap即可。以下是创建一个空LinkedHashMap的示例:

LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
保留插入顺序

LinkedHashMap保留了插入顺序,这意味着它会记住元素添加到映射中的顺序。当你遍历映射时,元素会按照它们添加到映射中的顺序返回。例如:

LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("cherry", 3);
for (String key : map.keySet()) {
    System.out.println(key);
}

以上代码打印:

apple
banana
cherry
按访问顺序排序

LinkedHashMap还提供了按访问顺序排序的迭代器,这意味着你可以按照最近最少使用(LRU)的顺序迭代元素。例如:

LinkedHashMap<String, Integer> map = new LinkedHashMap<>(10, 0.75f, true); // 设置访问顺序为true
map.put("apple", 1);
map.put("banana", 2);
map.put("cherry", 3);
map.get("apple"); // 访问“apple”
for (String key : map.keySet()) {
    System.out.println(key);
}

以上代码打印:

banana
cherry
apple

注意,我们在创建LinkedHashMap时将第三个参数设置为true,这是启用按访问顺序排序的开关。我们还使用了get()方法来访问“apple”,这使得“apple”成为最近被访问的元素,因此它被放置在了最后一个。

访问顺序和插入顺序综合

LinkedHashMap还提供了一个保留顺序的构造函数,该构造函数将LinkedHashMap配置为按访问顺序排序,但在访问顺序和插入顺序之间选择。例如:

LinkedHashMap<String, Integer> map = new LinkedHashMap<>(16, 0.75f, true);
map.put("apple", 1);
map.put("banana", 2);
map.put("cherry", 3);
map.get("apple");
map.put("date", 4);
for (String key : map.keySet()) {
    System.out.println(key);
}

输出应为:

banana
cherry
apple
date

我们首先将“apple”添加到映射中,然后访问它以将其置于最前面。然后我们将“date”添加到映射中,但由于“date”是最新的添加,它将在“banana”和“cherry”之前返回。

总结

LinkedHashMap是Java中一个非常有用的类,它保留了插入顺序并提供了按访问顺序排序的迭代器。这使得LinkedHashMap成为实现LRU缓存的理想容器。对于那些需要记住元素添加顺序的应用程序,LinkedHashMap也是一个非常有用的类。