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

📅  最后修改于: 2022-05-13 01:54:50.960000             🧑  作者: Mango

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

当元素由于散列而从 HashSet 中获取时,它们插入的顺序在检索时不会得到维护。 HashSet 使用称为散列的机制存储元素。我们可以使用 LinkedHashSet 来实现给定的任务。 LinkedHashSet 类实现了一个双向链表,以便它可以遍历所有元素。

例子:

Input : HashSetInput = {c, a, b}
Output: HashSetPrint = {c, a, b}

Input : HashSetInput = {"first", "second"}
Output: HashSetPrint = {"first", "second"}

使用 HashSet 实现:(不维护顺序)

句法:

HashSet num = new HashSet();

方法:

  1. 创建 HashSet 对象。
  2. 在 HashSet 中插入多个元素。
  3. 打印 HashSet。(不维护顺序)

下面是上述方法的实现:

Java
// Preserve insertion order of Java HashSet elements
// Order not maintained because HashSet used
import java.util.HashSet;
import java.util.Set;
  
public class PreserveHashSetOrderExample {
  
    public static void main(String[] args)
    {
  
        Set hSetNumbers = new HashSet();
  
        hSetNumbers.add(1);
        hSetNumbers.add(13);
        hSetNumbers.add(2);
        hSetNumbers.add(4);
  
        for (Integer number : hSetNumbers) {
            System.out.println(number);
        }
    }
}


Java
// Preserve insertion order of Java HashSet elements
// Using LinkedHashSet
import java.util.LinkedHashSet;
import java.util.Set;
  
public class PreserveHashSetOrderExample {
  
    public static void main(String[] args)
    {
  
        Set setNumbers
            = new LinkedHashSet();
  
        setNumbers.add(1);
        setNumbers.add(13);
        setNumbers.add(2);
        setNumbers.add(4);
  
        for (Integer number : setNumbers) {
            System.out.println(number);
        }
    }
}


输出
1
2
4
13

使用 LinkedHashSet 实现:(维护顺序)

句法:

HashSet num = new LinkedHashSet();

方法:

  1. 创建一个 HashSet 对象并使用 LinkedHashSet 的构造函数对其进行初始化。
  2. 在 HashSet 中插入多个元素。
  3. 打印 HashSet。(保持顺序)

下面是上述方法的实现:

Java

// Preserve insertion order of Java HashSet elements
// Using LinkedHashSet
import java.util.LinkedHashSet;
import java.util.Set;
  
public class PreserveHashSetOrderExample {
  
    public static void main(String[] args)
    {
  
        Set setNumbers
            = new LinkedHashSet();
  
        setNumbers.add(1);
        setNumbers.add(13);
        setNumbers.add(2);
        setNumbers.add(4);
  
        for (Integer number : setNumbers) {
            System.out.println(number);
        }
    }
}
输出
1
13
2
4