Ответ
Главное различие — List допускает дубликаты и сохраняет порядок вставки, а Set гарантирует уникальность элементов.
List (Список):
- Дубликаты: Разрешены.
- Порядок: Сохраняет порядок вставки (индексированный доступ
get(index)). - Типичные реализации:
ArrayList,LinkedList,Vector. - Использование: Когда важен порядок или нужны повторяющиеся элементы.
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Дубликат добавлен
System.out.println(list); // [Apple, Banana, Apple]
System.out.println(list.get(1)); // Banana (доступ по индексу)
Set (Множество):
- Дубликаты: Запрещены (новый элемент добавляется, только если его еще нет).
- Порядок: Не гарантирован, кроме
LinkedHashSet(порядок вставки) иTreeSet(сортировка). - Типичные реализации:
HashSet,LinkedHashSet,TreeSet. - Использование: Для хранения уникальных элементов, операций объединения/пересечения.
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Дубликат игнорируется
System.out.println(set); // [Banana, Apple] (порядок может быть любым)
Под капотом: HashSet использует HashMap для хранения элементов (O(1) для add, contains), а ArrayList — динамический массив (O(1) для доступа по индексу, O(n) для поиска).