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

-3 java hashset

这是我试过的。

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出 [Java、Script、C++、dotNet、C、JavaScript、Python]

编辑:刚读完这个,我想这可能是我问的问题的答案

Jus*_*per 6

相关的 JavaDoc

这个类实现了 Set 接口,由一个哈希表(实际上是一个 HashMap 实例)支持。它不保证 集合迭代顺序;特别是,它不保证订单会随着时间的推移保持不变。此类允许空元素。

基本上,一个HashSet:

  • 存储唯一元素并允许空值
  • 由 HashMap 支持
  • 不维护插入顺序
  • 不是线程安全的