Почему выход для набора такой же, как список. Я думал, что это будет по-другому, так как наборы неупорядочены - PullRequest
1 голос
/ 10 мая 2019
List<String> myList = new ArrayList<String>();
myList.add("A");
myList.add("B");
myList.add("C");
myList.add("D");

//Output is [A, B, C, D]



    Set<String> mySet = new HashSet<String>();
mySet.add("A");
mySet.add("AB");
mySet.add("AC");
mySet.add("AD");
mySet.add("AE");

// Вывод: AB, AC, A, AE, AD

// Затем я копирую набор в другой ArrayList и получаю его.

 List<String> myList2 = new ArrayList<String>(mySet);
 System.out.println(myList2);

//Вывод [AB, AC, A, AE, AD]

Почему порядок такой же?Я знаю, что нет способа предсказать порядок myList2, так как он был скопирован из набора, я удивляюсь, почему выходные данные совпадают с набором.

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Неупорядоченный Set не означает, что он будет время от времени менять порядок, если не произойдет структурной модификации.Если вы вставляете какой-то элемент в Set и после этого цикла над ним n раз, вы получите тот же порядок для loop-1 для loop-n.

Set<String> mySet = new HashSet<String>();
mySet.add("A");
mySet.add("AB");
mySet.add("AC");
mySet.add("AD");
mySet.add("AE");
//print it 5 times it will print in the same order for all 5
System.out.println(mySet); // print line-1
System.out.println(mySet); // print line-2
System.out.println(mySet); // print line-3
System.out.println(mySet); // print line-4
System.out.println(mySet);// print line-5

Таким образом, вы не должны ожидать, что порядок в строке 1 и порядок в строке 5 будут отличаться.

0 голосов
/ 10 мая 2019

Поскольку Set не упорядочен, а List упорядочен по своей природе, поэтому первый список вернет содержимое в том же порядке, который вы вставили.но во втором списке, который вы создали, были вставлены элементы в порядке, заданном функцией Set, которая является случайной.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...