Чем List отличается от Set?
- Когда использовать 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?
Разбор темы
- Collections Framework: карта и выбор структуры
Иерархия интерфейсов, сложности операций основных структур, неизменяемые коллекции и принцип выбора по паттерну доступа.
Связанные вопросы
- Что верно про неизменяемые и защитные коллекции? Middle
- Как выбираешь структуру данных под задачу? Проведи рассуждение на примере: нужно хранить сессии пользователей с быстрым поиском по id и обходом в порядке добавления. Middle
- Нужна структура с быстрым поиском по ключу, которая при обходе отдаёт элементы в порядке их добавления. Что выбрать? Middle
- Что верно про иерархию Collections Framework? Junior
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.