Получить доступ

Чем List отличается от Set?

JuniorКоллекции
Ещё спрашивают так:
  • Когда использовать List, а когда Set?
  • Какие реализации List и Set вы знаете?
Коротко

List — упорядоченная последовательность с дубликатами и доступом по индексу; Set — только уникальные элементы.

  • Реализации: ArrayList, LinkedList / HashSet, LinkedHashSet, TreeSet
  • Уникальность в HashSet держится на equals и hashCode

А ещё Порядок у Set зависит от реализации: HashSet — без порядка, LinkedHashSet — вставки, TreeSet — сортировка

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Выбор делают по смыслу задачи.

List — порядок важен, повторы возможны, нужен доступ по индексу: история действий, строки заказа. Реализации: ArrayList (массив, быстрый доступ по индексу — основной выбор), LinkedList (связный список, нужен редко).

Set — важна только принадлежность и уникальность: множество тегов, уже обработанные id. Проверка contains у HashSet в среднем O(1), у списка — O(n). Реализации:

  • HashSet — хеш-таблица, порядок не гарантирован;
  • LinkedHashSet — порядок добавления;
  • TreeSet — отсортированный, операции O(log n).

Уникальность в HashSet определяют hashCode() и equals() элемента: если их не переопределить у своего класса, два объекта с одинаковым содержимым окажутся разными элементами.

Ни одна из базовых реализаций не потокобезопасна.

Пример

List<String> visits = List.of("home", "cart", "home"); // повторы и порядок
Set<String> unique = new LinkedHashSet<>(visits);      // [home, cart]

Что хотят услышать

  • Различие: порядок и дубликаты против уникальности.
  • Основные реализации и чем они отличаются.
  • Роль equals и hashCode в HashSet.
  • Сложность contains — плюс.

Частые ошибки

  • Считать, что любое множество отсортировано.
  • Класть в хеш-множество объекты без корректных equals и hashCode.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓List хранит элементы по порядку и допускает дубликаты; Set хранит только уникальные элементы
  • ✗List хранит только объекты, Set — только примитивы
  • ✗Set всегда отсортирован, List — никогда
  • ✗List потокобезопасен, Set — нет

Что спросят дальше

  • Чем отличаются три основные реализации множества?
  • Почему Map не наследует Collection?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем