Arrays.asList receives a varargs argument, which is an array under the covers.
It simply returns a List object that contains the elements of the array argument.
So, if you do:
List<Integer> numbers = Arrays.asList(1, 2, 3);
You get a List<Integer> containing [1, 2, 3].
If you have this generic class:
class MyObject<T> { }
And do:
MyObject<String> myStrObj1 = new MyObject<>();
MyObject<String> myStrObj2 = new MyObject<>();
List<MyObject<String>> myStrObjects = Arrays.asList(myStrObj1, myStrObj2);
You get a List<MyObject<String>> containing [myStrObj1, myStrObj2].
The same happens when you pass some instances of Set<Integer> to 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);
You get a List<Set<Integers>> containing [[1], [5, 6]].
If you just want to create a new List object with the same elements as the Set object, you have to iterate the set and add each one of its elements to the list:
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);
}
Luckily, the constructor of ArrayList does exactly this for you. So all you have to do is:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
List<Integer> list = new ArrayList<>(set);