Arrays.asList
получает аргумент varargs , который представляет собой скрытый массив.
Он просто возвращает List
объект, содержащий элементы аргумента массива.
Итак, если вы это сделаете:
List<Integer> numbers = Arrays.asList(1, 2, 3);
, вы получите List<Integer>
, содержащий [1, 2, 3]
.
Если у вас есть этот generi c class:
class MyObject<T> { }
И выполните:
MyObject<String> myStrObj1 = new MyObject<>();
MyObject<String> myStrObj2 = new MyObject<>();
List<MyObject<String>> myStrObjects = Arrays.asList(myStrObj1, myStrObj2);
Вы получите List<MyObject<String>>
, содержащий [myStrObj1, myStrObj2]
.
То же самое происходит, когда вы передаете некоторые экземпляры 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);
Вы получите List<Set<Integers>>
, содержащий [[1], [5, 6]]
.
Если вы просто хотите создать новый объект 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);