Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое Коллекции в Java
Коллекции (Collections) — это контейнеры для хранения и управления группами объектов. Это фундаментальная часть Java API, предоставляющая стандартизированные структуры данных для работы с наборами элементов.
Основные иерархии
Вся Java Collections Framework строится на двух основных интерфейсах:
Collection
Базовый интерфейс для всех коллекций:
add(),remove(),contains()— основные операцииsize(),isEmpty()— проверка состоянияiterator()— обход элементов
Map
Отдельная иерархия для хранения пар ключ-значение (не наследуется от Collection).
Основные типы коллекций
List — упорядоченная коллекция (позволяет дубликаты):
List<String> arrayList = new ArrayList<>();
List<String> linkedList = new LinkedList<>();
List<String> vector = new Vector<>(); // legacy, синхронизирован
Set — неупорядоченная коллекция без дубликатов:
Set<String> hashSet = new HashSet<>();
Set<String> treeSet = new TreeSet<>(); // отсортирована
Set<String> linkedHashSet = new LinkedHashSet<>(); // порядок вставки
Queue — очередь (FIFO):
Queue<String> queue = new LinkedList<>();
Queue<String> priorityQueue = new PriorityQueue<>(); // приоритетная
Deque<String> deque = new LinkedList<>(); // двусторонняя очередь
Map — пары ключ-значение:
Map<String, Integer> hashMap = new HashMap<>();
Map<String, Integer> treeMap = new TreeMap<>();
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
Основные операции и производительность
| Структура | Доступ | Вставка | Удаление | Поиск |
|---|---|---|---|---|
| ArrayList | O(1) | O(n) | O(n) | O(n) |
| LinkedList | O(n) | O(1) | O(1) | O(n) |
| HashSet | — | O(1) | O(1) | O(1) |
| TreeSet | — | O(log n) | O(log n) | O(log n) |
| HashMap | — | O(1) | O(1) | O(1) |
Практический пример
public class CollectionsExample {
public static void main(String[] args) {
// List
List<Integer> numbers = new ArrayList<>();
numbers.add(5);
numbers.add(3);
numbers.add(8);
System.out.println(numbers.get(1)); // 3
// Set
Set<String> uniqueNames = new HashSet<>();
uniqueNames.add("Alice");
uniqueNames.add("Bob");
uniqueNames.add("Alice"); // дубликат не добавится
// Map
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 25);
ages.put("Bob", 30);
System.out.println(ages.get("Alice")); // 25
// Итерация
for (String name : uniqueNames) {
System.out.println(name);
}
// Stream API
numbers.stream()
.filter(n -> n > 3)
.map(n -> n * 2)
.forEach(System.out::println);
}
}
Выбор правильной коллекции
- Нужно ли сохранять порядок? → List
- Нужны уникальные элементы? → Set
- Нужны пары ключ-значение? → Map
- Часто удаляете элементы в начале/конце? → LinkedList или Deque
- Нужна быстрая вставка/удаление в начале? → LinkedList
- Нужна сортировка? → TreeSet или TreeMap
- Нужна потокобезопасность? → Collections.synchronizedList() или ConcurrentHashMap
Важные особенности
- Null элементы: Map и List допускают null, HashSet допускает одного null, TreeSet — нет (сравнение)
- Fail-fast итератор: если коллекция изменилась во время итерации, будет выброшено ConcurrentModificationException
- equals() и hashCode(): для использования в Set и как ключ в Map нужно правильно реализовать эти методы