Collectors.toSet() 中哪个 Set 实现?

k13*_*13i 6 java set java-stream collectors java-11

我有以下代码:

Stream.of(1, 4, 5).collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

从方法一的JavadoctoSet()中可以看到:

不保证返回的 Set 的类型 (...)

我查看了toSet()方法的实际实现,乍一看它似乎HashSet总是返回(至少在 JDK 11 中)。

我知道将来可以在不违反合同的情况下更改实现,但目前是否存在HashSet返回的实现不同的情况?

Joe*_*e C 5

Set从 JDK 11 开始,返回的类型Collectors.toSet()HashSet. 当然,这可能会在 Java 的未来版本中发生变化,因此您不应该依赖于此。

如果您希望使用特定类型的Set,则应该使用Collectors.toCollection,并提供 lambda 来创建您选择的集合。


Jen*_*ann 2

。JDK 源代码清楚地表明Collectors.toSet()始终使用HashSet::new. 正如你所说,这当然可能会改变。