Java hashset的打印元素顺序

Java hashset的打印元素顺序,java,collections,set,Java,Collections,Set,在准备Java考试期间,我遇到了以下问题: public static Function<String, String> change = i -> { if (i.equals("Au")) return "Ne"; else return i; }; Set<String> someStrings = Set.of("Au&

在准备Java考试期间,我遇到了以下问题:

public static Function<String, String> change = i -> {
        if (i.equals("Au"))
            return "Ne";
        else
            return i;
    };

Set<String> someStrings = Set.of("Au", "Ja", "Ta", "Cy", "Cu");
        someStrings = someStrings
                .stream()
                .map(change)
                .map(n -> n.substring(0, 1))
                .collect(Collectors.toSet());
        for (String s : someStrings) {
            System.out.print(s);
        }

公共静态功能更改=i->{
如果(i.等于(“Au”))
返回“Ne”;
其他的
返回i;
};
Set someStrings=Set.of(“Au”、“Ja”、“Ta”、“Cy”、“Cu”);
someStrings=someStrings
.stream()
.地图(更改)
.map(n->n.substring(0,1))
.collect(收集器.toSet());
对于(字符串s:SomeString){
系统输出打印;
}
对这个问题的回答表明印刷顺序很重要。但在这种情况下,如何确定打印顺序呢? 我唯一的猜测是Set.of()方法中列出元素的顺序是相反的。

没有为其迭代器提供定义的顺序:

元素不按特定顺序返回[…]

Set.of
被明确指定为返回:

  • 集合元素的迭代顺序未指定,可能会发生更改
定义为构造未指定的
,这意味着
的一般规则适用(见上文)


文档中没有定义任何可靠的顺序。实现在这里返回的任何顺序都是有效的。

a
HashSet
没有其属性的确定顺序elements@Lino:这是真的,但并不是说此代码中(公开)没有一个
HashSet
。但是关于
Set
接口itselt:
Set
同样的说法仍然正确:
Set
没有提供定义的顺序。的文档说,对于返回的集的类型、可变性、序列化性或线程安全性没有任何保证。只有a可以定义其元素的顺序。因为我们不知道它是否是树集,所以不能保证元素是有序的。@MisaD.:
TreeSet
不是有序的,它是有序的:它不保持插入顺序,它保持“自然顺序”
LinkedHashSet
维护插入顺序。似乎和三天前的考试一样。也许,这场可怕的考试会引发更多的问题。