Вопрос с собеседования · Java

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

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

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

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

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

Подробно

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

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.

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

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

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

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования