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

我正在寻找一个非常简单的方法来创build一个集合。

Arrays.asList("a", "b" ...)创build一个List<String>

有什么类似的Set

现在用Java 8,你可以做到这一点,而不需要第三方框架:

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

见collections家 。

请享用!

使用番石榴 ,它是这样简单:

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

或者对于一个可变集合:

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

有关更多数据types,请参阅Guava用户指南

你可以使用

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

正如其他人所说,使用:

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

这在Java中存在的原因是, 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) 

Arrays类中没有“固定大小” Set JDK实现。 你为什么要这个? 一个Set保证没有重复,但如果你手动input它们,你不应该需要的function…和List有更多的方法。 这两个接口都扩展了CollectionIterable


正如其他人所说,使用番石榴如果你真的想要这个function – 因为它不在JDK中。 看看他们的答案(特别是MichaelSchmeißer的回答)以获取有关信息。

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

 java.util.Collections.EMPTY_SET 

和:

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

不,但你可以这样做

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

在番石榴,你可以使用

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

newHashSet

这里有一个你可以使用的方法

  /** * Utility method analogous to {@link java.util.Arrays#asList(Object[])} * * @param ts * @param <T> * @return the set of all the parameters given. */ @SafeVarargs @SuppressWarnings("varargs") public static <T> Set<T> asSet(T... ts) { return new HashSet<>(Arrays.asList(ts)); }