Назовите основные отличия коллекций Set и List.

Set и List — это два ключевых интерфейса коллекций в Java, и они предназначены для разных сценариев хранения данных. Их основные отличия касаются уникальности элементов, порядка хранения, доступа по индексу и производительности.

Ниже — подробное сравнение по основным критериям.

🔑 Основные отличия Set и List

Критерий List Set
Уникальность элементов Разрешает дубликаты Не допускает дубликатов
--- --- ---
Порядок хранения Сохраняет порядок добавления Зависит от реализации: порядок не гарантируется (HashSet), сохраняется (LinkedHashSet), сортируется (TreeSet)
--- --- ---
Доступ по индексу Есть (get(index)) Нет доступа по индексу
--- --- ---
Основные реализации ArrayList, LinkedList, Vector HashSet, LinkedHashSet, TreeSet
--- --- ---
Скорость доступа к элементу Быстрая при ArrayList, медленнее у LinkedList Быстрая проверка на наличие (HashSet)
--- --- ---
Методы работы с элементами Индексированные (get, set, add(index)) Проверка через contains, add, remove
--- --- ---
Когда использовать Когда важен порядок или нужны дубликаты Когда важна уникальность элементов
--- --- ---

📋 Примеры различий

✅ Дубликаты:

List&lt;String&gt; list = new ArrayList<>();
list.add("apple");
list.add("apple");
System.out.println(list); // \[apple, apple\]
Set&lt;String&gt; set = new HashSet<>();
set.add("apple");
set.add("apple");
System.out.println(set); // \[apple\]

📌 Индексы:

list.get(0); // работает
set.get(0); // ошибка компиляции: метода нет

🧠 Поведение в зависимости от реализации

List:

  • ArrayList — быстрый доступ по индексу, дорогие вставки в середину.

  • LinkedList — быстрая вставка/удаление в начале/конце, медленный доступ по индексу.

Set:

  • HashSet — не гарантирует порядок, самая быстрая для операций add и contains.

  • LinkedHashSet — сохраняет порядок добавления.

  • TreeSet — хранит элементы в отсортированном виде (по Comparable или Comparator), медленнее, но полезен для поиска.

🚀 Когда использовать

  • Используй List, если:

    • Важен порядок элементов.

    • Допускаются дубликаты.

    • Нужен доступ по индексу.

  • Используй Set, если:

    • Важна уникальность элементов.

    • Часто требуется поиск наличия элемента.

    • Нужна автоматическая сортировка (TreeSet) или устойчивый порядок вставки (LinkedHashSet).

Таким образом, List и Set решают разные задачи: List — для последовательностей с дубликатами, Set — для хранения уникальных значений. Выбор зависит от логики задачи и требований к производительности и поведению коллекции.