📜  如何保留Java HashSet 元素的插入顺序?(1)

📅  最后修改于: 2023-12-03 15:38:09.046000             🧑  作者: Mango

如何保留 Java HashSet 元素的插入顺序?

介绍

Java 中的 HashSet 类是基于哈希表实现的集合接口的一个实现类,它是无序的,即当你遍历 HashSet 元素时,不保证元素的顺序和插入时的顺序一致。如果你希望 HashSet 的元素可以按照插入的顺序来遍历,该怎么办呢?

解决方案

在 Java 8 之前,要保留 HashSet 元素的插入顺序,需要使用 LinkedHashMap 类,它可以保持键值对的插入顺序。具体实现方式是将 HashSet 中元素当作 LinkedHashMap 的 key,而 value 则固定为一个任意不为 null 的Object。这种方法虽然可行,但不够优雅。

Java 8 引入了一个名为 LinkedHashSet 的类,它继承了 HashSet 并且使用了一个链表来维护插入顺序,因此你可以使用它来保持 HashSet 的插入顺序。LinkedHashSet 中有个构造函数,它允许你传入一个 HashMap 来初始化 HashSet,通过该构造函数,你可以将 HashSet 转化成 LinkedHashSet,并保留插入顺序。

下面是示例代码:

import java.util.HashSet;
import java.util.LinkedHashSet;

public class Main {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("A");
        set.add("B");
        set.add("C");

        LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>(set);

        // 输出结果为 A -> B -> C
        for (String s : linkedHashSet) {
            System.out.println(s);
        }
    }
}
总结

本文介绍了如何使用 LinkedHashSet 类来保留 HashSet 元素的插入顺序,同时也讨论了在 Java 8 之前如何实现这个功能。LinkedHashSet 应该是你首选的方案,因为它更加简单明了。