Интерфейс Collection
Collection<E> — корневой интерфейс иерархии коллекций в Java (пакет java.util). Он представляет группу элементов произвольного типа E и описывает общий контракт работы со всеми коллекциями: добавление, удаление, проверка наличия, обход, размер, преобразование в массив.
Сам Collection напрямую не реализуется. Вместо этого Java предоставляет производные интерфейсы (List, Set, Queue, Deque) и их конкретные классы (ArrayList, HashSet, LinkedList и др.). Это позволяет писать универсальный код, работающий с любой коллекцией через единый API.
Иерархия
Iterable<E>
└── Collection<E>
├── List<E> (ArrayList, LinkedList, Vector)
├── Set<E> (HashSet, TreeSet, LinkedHashSet)
└── Queue<E> (LinkedList, PriorityQueue, ArrayDeque)
Основные методы
boolean add(E e)— добавить элементboolean remove(Object o)— удалить первое вхождениеboolean contains(Object o)— проверить наличиеint size()— количество элементовboolean isEmpty()— пуста ли коллекцияvoid clear()— удалить все элементыIterator<E> iterator()— получить итераторObject[] toArray()— преобразовать в массив
Пример 1. Базовые операции
import java.util.ArrayList;
import java.util.Collection;
public class CollectionBasics {
public static void main(String[] args) {
Collection<String> kits = new ArrayList<>();
kits.add("Arduino UNO");
kits.add("ESP32");
kits.add("Robot Phobo");
System.out.println("Размер: " + kits.size());
System.out.println("Содержит ESP32? " + kits.contains("ESP32"));
kits.remove("Arduino UNO");
System.out.println("После удаления: " + kits);
}
}
Output:
Размер: 3
Содержит ESP32? true
После удаления: [ESP32, Robot Phobo]
Пример 2. Обход коллекции
import java.util.ArrayList;
import java.util.Collection;
public class CollectionIterate {
public static void main(String[] args) {
Collection<Integer> pins = new ArrayList<>();
pins.add(2);
pins.add(4);
pins.add(5);
int sum = 0;
for (Integer p : pins) {
sum += p;
}
System.out.println("Сумма пинов: " + sum);
}
}
Output:
Сумма пинов: 11
Пример 3. Массовые операции
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class CollectionBulk {
public static void main(String[] args) {
Collection<String> a = new ArrayList<>(Arrays.asList("D2", "D4", "D5"));
Collection<String> b = new ArrayList<>(Arrays.asList("D5", "D6", "D8"));
Collection<String> union = new ArrayList<>(a);
union.addAll(b);
System.out.println("Объединение: " + union);
Collection<String> intersect = new ArrayList<>(a);
intersect.retainAll(b);
System.out.println("Пересечение: " + intersect);
Collection<String> diff = new ArrayList<>(a);
diff.removeAll(b);
System.out.println("Разность: " + diff);
}
}
Output:
Объединение: [D2, D4, D5, D5, D6, D8]
Пересечение: [D5]
Разность: [D2, D4]
Пример 4. Преобразование в массив
import java.util.ArrayList;
import java.util.Collection;
public class CollectionToArray {
public static void main(String[] args) {
Collection<String> sensors = new ArrayList<>();
sensors.add("HC-SR04");
sensors.add("DHT22");
sensors.add("MPU6050");
String[] arr = sensors.toArray(new String[0]);
for (int i = 0; i < arr.length; i++) {
System.out.println(i + ": " + arr[i]);
}
}
}
Output:
0: HC-SR04
1: DHT22
2: MPU6050
Пример 5. Stream API над Collection
import java.util.ArrayList;
import java.util.Collection;
public class CollectionStream {
public static void main(String[] args) {
Collection<Integer> values = new ArrayList<>();
values.add(10);
values.add(25);
values.add(7);
values.add(42);
long big = values.stream().filter(v -> v > 10).count();
int total = values.stream().mapToInt(Integer::intValue).sum();
System.out.println("Больше 10: " + big);
System.out.println("Сумма: " + total);
}
}
Output:
Больше 10: 2
Сумма: 84
Подводные камни
Collectionне гарантирует порядок — толькоListупорядочен по индексу.add()может вернутьfalse(например,Setотвергает дубликаты).Изменение коллекции во время итерации через
for-eachбросаетConcurrentModificationException. ИспользуйтеIterator.remove().Collection.toArray()без аргумента возвращаетObject[], а не типизированный массив — передавайтеnew T[0].equals()дляCollectionне имеет общего контракта — уListиSetразные правила сравнения.
См. также
Примечание
Материал подготовлен на основе официального руководства Oracle The Collections Framework и распространяется на условиях Oracle Free Documentation License. Тексты переписаны своими словами, примеры кода — оригинальные.