LinkedHashMap 使用双向链表来维护元素的顺序,顺序为插入顺序或者最近最少使用(LRU)顺序
在 Java 的 LinkedHashMap 中,元素的顺序是基于插入顺序或访问顺序来维护的,具体取决于构造 LinkedHashMap 对象时所使用的构造方法。
-
默认情况下,LinkedHashMap 使用插入顺序来维护元素的顺序。这意味着元素会按照它们被插入到 LinkedHashMap 中的顺序进行迭代和访问。
-
当使用带有 accessOrder 参数的构造方法时,LinkedHashMap 将使用访问顺序来维护元素的顺序。
通过将 accessOrder 参数设置为 true,你可以启用访问顺序。在访问顺序模式下,每次访问一个元素(包括获取或更新操作)会将该元素移到链表末尾,使得最近访问的元素位于链表末尾。
需要注意的是,无论使用插入顺序还是访问顺序,LinkedHashMap 内部都使用哈希表来存储键值对。
链表结构只是用来维护元素的顺序。
以下是一个示例:
import java.util.LinkedHashMap;
public class LinkedHashMapExample {
public static void main(String[] args) {
// 使用插入顺序创建 LinkedHashMap
LinkedHashMap<Integer, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put(3, "C");
linkedHashMap.put(1, "A");
linkedHashMap.put(2, "B");
System.out.println(linkedHashMap); // 输出:{3=C, 1=A, 2=B}
// 使用访问顺序创建 LinkedHashMap
LinkedHashMap<Integer, String> accessOrderedMap = new LinkedHashMap<>(16, 0.75f, true);
accessOrderedMap.put(3, "C");
accessOrderedMap.put(1, "A");
accessOrderedMap.put(2, "B");
System.out.println(accessOrderedMap); // 输出:{3=C, 1=A, 2=B}
// 进行一些访问操作
accessOrderedMap.get(2);
accessOrderedMap.get(1);
System.out.println(accessOrderedMap); // 输出:{3=C, 2=B, 1=A}
}
}
在上述示例中,第一个 LinkedHashMap 使用插入顺序,元素的顺序与插入顺序相同。
第二个 LinkedHashMap 启用了访问顺序,通过访问键为 1 和 2 的元素,这两个元素被移到链表末尾,
因此输出结果:{3=C, 2=B, 1=A}。