我想在Java中将数组转换为Set。有一些明显的方法可以做到这一点(即使用循环),但我想做一些更整洁的事情,比如:
java.util.Arrays.asList(Object[] a);
有什么想法吗?
我想在Java中将数组转换为Set。有一些明显的方法可以做到这一点(即使用循环),但我想做一些更整洁的事情,比如:
java.util.Arrays.asList(Object[] a);
有什么想法吗?
当前回答
在Java 10中:
String[] strs = {"A", "B"};
Set<String> set = Set.copyOf(Arrays.asList(strs));
Set.copyOf返回包含给定集合元素的不可修改集合。
给定的集合不能为null,并且不能包含任何null元素。
其他回答
使用Guava,您可以做到:
T[] array = ...
Set<T> set = Sets.newHashSet(array);
这样地:
Set<T> mySet = new HashSet<>(Arrays.asList(someArray));
在Java 9+中,如果不可修改集合正常:
Set<T> mySet = Set.of(someArray);
在Java 10+中,可以从数组组件类型推断出泛型类型参数:
var mySet = Set.of(someArray);
小心
Set.of抛出IllegalArgumentException-如果有任何重复someArray中的元素。查看更多详细信息:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Set.html#of(例如…)
Set<T> b = new HashSet<>(Arrays.asList(requiredArray));
在Java 10中:
String[] strs = {"A", "B"};
Set<String> set = Set.copyOf(Arrays.asList(strs));
Set.copyOf返回包含给定集合元素的不可修改集合。
给定的集合不能为null,并且不能包含任何null元素。
快速:您可以做到:
// Fixed-size list
List list = Arrays.asList(array);
// Growable list
list = new LinkedList(Arrays.asList(array));
// Duplicate elements are discarded
Set set = new HashSet(Arrays.asList(array));
并反转
// Create an array containing the elements in a list
Object[] objectArray = list.toArray();
MyClass[] array = (MyClass[])list.toArray(new MyClass[list.size()]);
// Create an array containing the elements in a set
objectArray = set.toArray();
array = (MyClass[])set.toArray(new MyClass[set.size()]);