在 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}。