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"))