.asSet(...)是否存在于任何API中?

时间:2013-05-03 12:20:19

标签: java collections

我正在寻找一种非常简单的方法来创建一个Set。

Arrays.asList("a", "b" ...)创建List<String>

Set是否有类似内容?

10 个答案:

答案 0 :(得分:57)

使用Guava,就像那样简单:

Set<String> mySet = ImmutableSet.<String> of("a", "b");

或者对于一个可变集:

Set<String> mySet = Sets.newHashSet("a", "b")

有关更多数据类型,请参阅Guava user guide

答案 1 :(得分:47)

您可以使用

new HashSet<String>(Arrays.asList("a","b"));

答案 2 :(得分:47)

现在使用Java 8,您可以在不需要第三方框架的情况下执行此操作:

Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());

请参阅Collectors

享受!

答案 3 :(得分:22)

对于具有零个或一个成员的集合的特殊情况,您可以使用:

java.util.Collections.EMPTY_SET

java.util.Collections.singleton("A")

答案 4 :(得分:16)

正如其他人所说,使用:

new HashSet<String>(Arrays.asList("a","b"));

Java中存在 not 的原因是Arrays.asList返回固定大小的列表,换句话说:

public static void main(String a[])
{
  List<String> myList = Arrays.asList("a", "b");
  myList.add("c");
}

返回:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(Unknown Source)
    at java.util.AbstractList.add(Unknown Source)

Set类中没有“固定大小”Arrays的JDK实现。你为什么要这个? Set保证没有重复项,但如果您手动输入它们,则不需要该功能...... List有更多方法。两个接口都扩展CollectionIterable


正如其他人所说,使用guava如果你真的想要这个功能 - 因为它不在JDK中。看看他们的答案(特别是MichaelSchmeißer的回答),了解相关信息。

答案 5 :(得分:7)

在Java 9中,通过工厂方法添加了类似的功能:

Set<String> oneLinerSet = Set.of("a", "b", ...);

List也有等价物。)

答案 6 :(得分:2)

不,但你可以这样做

new HashSet<String>(Arrays.asList("a", "b", ...));

答案 7 :(得分:2)

guava中,您可以使用

Set<String> set = Sets.newHashSet("a","b","c");

newHashSet

答案 8 :(得分:2)

这是一个可以使用的方法

alert.addAction(UIAlertAction(title: "Ok", style: default, handler: nil)

答案 9 :(得分:1)

使用Java 8和枚举的另一种方法是:

Set<String> set = EnumSet.of(StandardOpenOption.CREATE, StandardOpenOption.READ);

请参见EnumSet

我建议在这种方法和

之间进行性能分析
Set<String> set = Stream.of(StandardOpenOption.CREATE, StandardOpenOption.READ).collect(Collectors.toSet());

因为如果您有五个以上的元素,则该方法的javadoc指出可能是性能问题,如您在Set.Of(E, E...)的javadoc中所见。