Ответ
Java Collections Framework (JCF) — это унифицированная архитектура для представления и управления группами объектов (коллекциями). Он предоставляет интерфейсы, их реализации и алгоритмы.
Основные интерфейсы и реализации:
| Интерфейс | Описание | Ключевые реализации |
|---|---|---|
List<E> |
Упорядоченная коллекция (последовательность), допускает дубликаты. | ArrayList, LinkedList, Vector |
Set<E> |
Коллекция уникальных элементов. | HashSet, TreeSet, LinkedHashSet |
Queue<E> |
Коллекция, предназначенная для хранения элементов перед обработкой. | LinkedList, PriorityQueue, ArrayDeque |
Map<K, V> |
Объект, отображающий ключи на значения (не наследует Collection). |
HashMap, TreeMap, LinkedHashMap, ConcurrentHashMap |
Примеры:
// List
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
System.out.println(names.get(0)); // Alice
// Set
Set<Integer> uniqueNumbers = new HashSet<>();
uniqueNumbers.add(1);
uniqueNumbers.add(1); // Не добавится
System.out.println(uniqueNumbers.size()); // 1
// Map
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 95);
scores.put("Bob", 87);
System.out.println(scores.get("Alice")); // 95
Важные особенности:
- Итераторы: Предоставляют безопасный способ обхода и удаления элементов.
- Утилитный класс
Collections: Содержит статические методы (sort(),reverse(),synchronizedList()). - Потокобезопасность: Большинство реализаций не потокобезопасны. Используйте
ConcurrentHashMap,CopyOnWriteArrayListили методыCollections.synchronizedXXX(). - Сравнение и порядок:
TreeSet/TreeMapиспользуютComparable/Comparator.HashSet/HashMapиспользуютhashCode()иequals().
Ответ 18+ 🔞
Слушай, а вот эта ваша Java Collections Framework — это ж, блядь, как такой большой универсальный шкаф для хлама, только для объектов. Пришёл, открыл нужную полку, взял что надо, не хуя не перепутал. Архитектура, понимаешь, унифицированная, чтобы не изобретать каждый раз свой велосипед с квадратными колёсами.
Основные штуки, которые там есть:
| Штука | Нахуя нужно | Где живёт (реализации) |
|---|---|---|
List<E> |
Просто упорядоченная куча. Как очередь в поликлинику: кто первый пришёл, тот первый и стоит. Одинаковых мудаков может быть сколько угодно. | ArrayList, LinkedList, Vector (этот старый дед) |
Set<E> |
А вот это коллекция для уникальных снежинок. Два одинаковых элемента? Не, не слышал. Один попал — второй уже нихуя. | HashSet, TreeSet, LinkedHashSet |
Queue<E> |
Очередь, блядь, самая натуральная. Стоят, ждут обработки. Как в столовой. | LinkedList, PriorityQueue (для VIP-персон), ArrayDeque |
Map<K, V> |
Это вообще отдельная песня, в Collection не входит, но все её любят. Шкаф с ящичками: на каждом ящике ключ (K), внутри — значение (V). Открыл по ключу — достал что нужно. |
HashMap, TreeMap, LinkedHashMap, ConcurrentHashMap (для потасовок в несколько потоков) |
Ну, смотри, как этим пользоваться, чтоб не облажаться:
// List — просто пихаем всё подряд по порядку
List<String> imena = new ArrayList<>();
imena.add("Алиса");
imena.add("Боб");
System.out.println(imena.get(0)); // Вытащит "Алису", ебать
// Set — пытаемся запихнуть одно и то же дважды
Set<Integer> unikalnyeChisla = new HashSet<>();
unikalnyeChisla.add(1);
unikalnyeChisla.add(1); // А вот эту хуйню он проигнорит, потому что уже есть
System.out.println(unikalnyeChisla.size()); // Напечатает 1, вот же ж хитрая жопа!
// Map — кладём оценку по имени студента
Map<String, Integer> ocenki = new HashMap<>();
ocenki.put("Алиса", 95);
ocenki.put("Боб", 87); // Боб, учи матан, блядь!
System.out.println(ocenki.get("Алиса")); // Достаём 95, красота
А теперь, внимание, важные фишки, без которых ты наебнёшься:
- Итераторы (
Iterator): Это как цивилизованный способ рыться в чужом шкафу. Можно пройтись по всем вещам и даже аккуратно выкинуть какую-нибудь херню, не развалив всё к хуям. - Утилитный класс
Collections: Это такой универсальный мультитул. Нужно отсортировать список?Collections.sort(). Развернуть задом наперёд?Collections.reverse(). Сделать коллекцию потрохоустойчивой?Collections.synchronizedList(). Вообще, волшебная палочка, ёпта. - Потокобезопасность (Thread-safety): Вот тут, блядь, засада. Почти все эти
ArrayListиHashMap— они как одноразовые стаканчики в драке. Если несколько потоков начнут в них одновременно пихаться, будет пиздец иConcurrentModificationException. Поэтому либо используй специальные штуки вродеConcurrentHashMapилиCopyOnWriteArrayList, либо оборачивай черезCollections.synchronizedXXX(). Но осторожно, это не панацея, а то подозрение ебать чувствую. - Сравнение и порядок: Если ты используешь
TreeSetилиTreeMap, то элементы должны уметь сравниваться (черезComparableилиComparator). А дляHashSetиHashMapкритически важно правильно переопределить методыhashCode()иequals(), иначе два одинаковых объекта окажутся в разных углах шкафа, и ты нихуя их не найдёшь. Это основа, чувак, без этого ты в пролёте.