Ответ
Порядок элементов в Set зависит от конкретной реализации:
| Реализация | Гарантия порядка | Основание для хранения |
|---|---|---|
| HashSet | Не гарантируется | Хэш-таблица (на основе hashCode()). Порядок может меняться при изменении размера внутренней структуры. |
| LinkedHashSet | Порядок вставки (insertion-order) | Расширяет HashSet, добавляя двусвязный список, который сохраняет последовательность добавления элементов. |
| TreeSet | Порядок сортировки (sorted-order) | Красно-чёрное дерево. Элементы сортируются согласно их natural ordering (интерфейс Comparable) или переданному Comparator. |
Пример:
Set<String> hashSet = new HashSet<>(Arrays.asList("banana", "apple", "cherry"));
System.out.println(hashSet); // Возможный вывод: [apple, cherry, banana] (порядок непредсказуем)
Set<String> linkedSet = new LinkedHashSet<>(Arrays.asList("banana", "apple", "cherry"));
System.out.println(linkedSet); // Гарантированный вывод: [banana, apple, cherry]
Set<String> treeSet = new TreeSet<>(Arrays.asList("banana", "apple", "cherry"));
System.out.println(treeSet); // Гарантированный вывод: [apple, banana, cherry] (лексикографический порядок)