Arrays.asList 接收一个 varargs 参数,这是一个隐藏的数组。
它只是返回一个包含数组参数元素的List 对象。
所以,如果你这样做:
List<Integer> numbers = Arrays.asList(1, 2, 3);
你会得到一个包含[1, 2, 3]的List<Integer>。
如果你有这个泛型类:
class MyObject<T> { }
然后做:
MyObject<String> myStrObj1 = new MyObject<>();
MyObject<String> myStrObj2 = new MyObject<>();
List<MyObject<String>> myStrObjects = Arrays.asList(myStrObj1, myStrObj2);
你会得到一个包含[myStrObj1, myStrObj2]的List<MyObject<String>>。
当您将Set<Integer> 的某些实例传递给Arrays.asList 时,也会发生同样的情况:
Set<Integer> integerSet1 = new HashSet<>();
integerSet1.add(1);
Set<Integer> integerSet2 = new HashSet<>();
integerSet2.add(5);
integerSet2.add(6);
List<Set<Integer>> integerSets = Arrays.asList(integerSet1, integerSet2);
你会得到一个包含[[1], [5, 6]]的List<Set<Integers>>。
如果您只想创建一个新的List 对象,其元素与Set 对象相同,则必须迭代该集合并将其每个元素添加到列表中:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
List<Integer> list = new ArrayList<>();
for (Integer element : set) {
list.add(element);
}
幸运的是,ArrayList 的构造函数正是为您完成了这项工作。所以你所要做的就是:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
List<Integer> list = new ArrayList<>(set);