【发布时间】:2021-07-16 15:08:17
【问题描述】:
在准备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);
}
这个问题的答案表明打印顺序很重要。但是在这种情况下应该如何确定打印顺序呢? 我唯一的猜测是在 Set.of() 方法中列出元素的顺序相反。
【问题讨论】:
-
a
HashSet的元素没有确定的顺序 -
@Lino:这是真的,但并不是说没有一个
HashSet(公开地)参与此代码。但是关于Set接口itselt,同样的说法仍然成立:Set没有提供定义的排序。 -
Collectors.toSet()的文档说不保证返回的 Set 的类型、可变性、可序列化性或线程安全性。只有TreeSet可以定义其元素的顺序。由于我们不知道它是否是 TreeSet,因此无法保证元素是有序的。 -
@MisaD.:
TreeSet没有排序,它是排序的:它不保持插入顺序,它保持“自然顺序”。LinkedHashSet维护插入顺序。 -
好像和this question一样的考试,我们才三天前。或许,这场可怕的考试引发了更多的问题。
标签: java collections set