为什么hashset不按代码中的顺序添加对象?

0s0u357o  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(377)

这个问题在这里已经有答案了

java设置保留顺序(13个答案)
5个月前关门了。
这就是我试过的。

import java.util.*;
public class SetDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        HashSet<String> s1=new HashSet<String>();
        s1.add("Java");
        s1.add("C++");
        s1.add("C");
        s1.add("dotNet");
        s1.add("JavaScript");
        s1.add("Script");
        s1.add("Python");
        s1.add("JavaScript");
    }
}

输出[java、脚本、c++、dotnet、c、javascript、python]
edit:just read 我想这也许是我问的答案

ax6ht2ek

ax6ht2ek1#

从相关javadoc:
这个类实现set接口,由一个哈希表(实际上是一个hashmap示例)支持。对机组的运行顺序不作保证;特别是,它不能保证随着时间的推移,订单将保持不变。此类允许空元素。
基本上,哈希集:
存储唯一元素并允许空值
由hashmap支持
不保持插入顺序
不是线程安全的

jvidinwx

jvidinwx2#

你需要使用 LinkedHashSet<>() 同样的道理。

import java.util.*;
public class SetDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        HashSet<String> s1=new LinkedHashSet<String>();
        s1.add("Java");
        s1.add("C++");
        s1.add("C");
        s1.add("dotNet");
        s1.add("JavaScript");
        s1.add("Script");
        s1.add("Python");
        s1.add("JavaScript");
    }
}

您也可以使用 SortedSet 如果你想要自然的秩序。

相关问题