Коллекции в Java: List, Set и Map простыми словами

Массив в Java имеет фиксированный размер — неудобно, если вы не знаете заранее, сколько будет товаров в корзине. Для таких задач есть коллекции. Разбираем три главных интерфейса и когда какой выбирать.
Редакция Бинариума
Пишем о профессиях в дизайне, BIM и IT · 7 минут чтения
Из этой статьи вы узнаете:
List — список с порядком
List — упорядоченный список, где элементы могут повторяться. Как очередь в кофейне: важен порядок, и два человека могут заказать одно и то же.
List<String> cart = new ArrayList<>();
cart.add("Хлеб");
cart.add("Молоко");
cart.add("Хлеб");
System.out.println(cart.get(0)); // ХлебSet — множество без повторов
Set хранит только уникальные элементы. Например, список городов, из которых были заказы: каждый город — один раз.
Set<String> cities = new HashSet<>();
cities.add("Казань");
cities.add("Казань");
System.out.println(cities.size()); // 1Map — словарь «ключ — значение»
Map хранит пары: по ключу можно быстро найти значение. Как телефонная книга: имя — номер.
Map<String, Integer> stock = new HashMap<>();
stock.put("Кофе", 12);
stock.put("Чай", 5);
System.out.println(stock.get("Кофе")); // 12Курс Бинариума
Java-разработчик с нуля — коллекции на реальных задачах
Как выбрать коллекцию
| Задача | Коллекция |
|---|---|
| Список с порядком и повторами | ArrayList |
| Уникальные элементы, порядок не важен | HashSet |
| Уникальные элементы в отсортированном виде | TreeSet |
| Поиск значения по ключу | HashMap |
| Ключи в отсортированном порядке | TreeMap |
| Порядок добавления важен | LinkedHashSet, LinkedHashMap |
Частые ошибки
- Изменение коллекции в цикле for-each — приводит к исключению. Используйте итератор или removeIf.
- get из Map без проверки — если ключа нет, вернётся null.
- Свои объекты в HashSet без equals и hashCode — одинаковые объекты будут считаться разными.
- Объявление через реализацию — лучше писать List<String> list = new ArrayList<>(), а не ArrayList<String>.
Главное
- List — порядок и повторы, Set — уникальность, Map — ключ и значение.
- В большинстве задач хватает ArrayList, HashSet и HashMap.
- Для своих объектов в Set и Map нужны equals и hashCode.
- Не изменяйте коллекцию во время перебора for-each.
Частые вопросы
Чем ArrayList отличается от LinkedList?
ArrayList быстрее получает элемент по индексу, LinkedList — быстрее вставляет в начало и середину. На практике чаще используют ArrayList.
Можно ли хранить в коллекции int?
Напрямую нет, но Java автоматически упакует int в Integer.
Курс Бинариума
Java-разработчик с нуля
Коллекции, ООП, исключения и тесты — на практических задачах.
- 11 недель обучения
- 10+ практических работ
- Проект на GitHub