Java8:初始化一个键的哈希集的最短方法是什么?

Java8:初始化一个键的哈希集的最短方法是什么?,java,Java,目前,这是我创建一个元素哈希集的方式: new HashSet<>(Arrays.asList("123")) 不幸的是,它在Java8中不兼容。您可以编写自己的方法集。(注意:Set.of不返回HashSet) 但是最短的往往不是最好的,这清楚地说明了这一点 new HashSet<>() {{ add("123"); }} newhashset(){{add(“123”);} (我想。) (另外,Java 8.Java SE 11是当前的长期支持版本,即将被14

目前,这是我创建一个元素哈希集的方式:

new HashSet<>(Arrays.asList("123"))

不幸的是,它在Java8中不兼容。

您可以编写自己的
方法集。(注意:
Set.of
不返回
HashSet

但是最短的往往不是最好的,这清楚地说明了这一点

new HashSet<>() {{ add("123"); }}
newhashset(){{add(“123”);}
(我想。)

(另外,Java 8.Java SE 11是当前的长期支持版本,即将被14.Get move取代。)

如果您只需要一个集合,而不是哈希集合,您可以使用。它返回一个由一个元素组成的不可变集合,这就是Java 9+中
set.of(“123”)
返回的内容

请注意,
Set.of(…)
singleton(…)
都没有声明返回哈希集,而只是一个单值不可变集

如果您想要
HashSet
的实际实例,可以将其转换为一个实例,但这样您就得到了一些类似于您已有的实例:

new HashSet<>(Collections.singleton("123"))
newhashset(Collections.singleton(“123”))

(但是不需要为
Arrays.asList(…)
)创建不必要的数组。

如果您只需要一个集合,而不是哈希集合,那么可以使用。它返回一个由一个元素组成的不可变集合,就像Java 9+中的
set.of(“123”)
。@khelwood值得添加
Collections.singleton(“123”)
将返回一个不可修改的集合。@ernest_k也将
set.of()
但是。我不知道
Collections.singleton
直到现在才返回
set
!我一直认为出于某种原因,它返回了一个
集合
@khelwood@Sweeper有点奇怪的是,列表中有
singletonList
,集合中有
singleton
。奇怪的命名决定。初始化器需要两个大括号(一个用于类,一个用于实例初始化)。你可能会建议不要真的这样做。@danie,我是这么想的。我想是的。也许还不够清楚。
{{add}
技巧很有效,但它很容易混淆,并且它创建了一个不必要的
HashSet
匿名子类。我不推荐它。“但是最短的往往不是最好的,这清楚地说明了这一点。”对于一些人来说,为什么不使用这种结构可能是清楚的,但对于大多数新的Java程序员来说,情况就不一样了。(IMHO说这比这篇文章要好)非常好地描述了这些选择,它们给了我们什么以及它们的局限性。谢谢
new HashSet<>(Collections.singleton("123"))