如何将数组转换为Java中的Set

问题

我想将数组转换为Java中的Set。有一些明显的方法可以做到这一点(即有一个循环),但我想要一些更整洁的东西,如:

java.util.Arrays.asList(Object[] a);

有任何想法吗?


#1 热门回答(969 赞)

喜欢这个:

Set<T> mySet = new HashSet<T>(Arrays.asList(someArray));

在Java 9中,如果不可修改的设置是可以的:

Set<T> mySet = Set.of(someArray);

在Java 10中,可以从数组组件类型推断泛型类型参数:

var mySet = Set.of(someArray);

#2 热门回答(177 赞)

Set<T> mySet = new HashSet<T>();
Collections.addAll(mySet, myArray);

这是来自JDK 6的Collections.addAll(java.util.Collection, T...)

另外:如果我们的数组充满原语怎么办?

对于JDK <8,我会写一个明显的forloop来一次性完成换行和加法集。

对于JDK> = 8,一个有吸引力的选项是这样的:

Arrays.stream(intArray).boxed().collect(Collectors.toSet());

#3 热门回答(110 赞)

随着Guava你可以这样做:

T[] array = ...
Set<T> set = Sets.newHashSet(array);