Короткий ответ
Несмотря на похожие названия, это разные сущности. java.util.Collection — это интерфейс, корень иерархии коллекций: от него наследуются List, Set и Queue, а сам он задаёт базовый контракт — size(), isEmpty(), add(E), remove(Object), contains(Object), iterator(). java.util.Collections — это утилитный класс со статическими методами для работы с коллекциями.
Как это работает подробнее
Создать «объект Collection» напрямую нельзя: интерфейс можно лишь реализовать или использовать одного из наследников. Класс Collections не участвует в иерархии коллекций и содержит только готовые алгоритмы и обёртки.
- Алгоритмы: сортировка
sort, перемешиваниеshuffle, реверсreverse, бинарный поискbinarySearch, поиск максимума и минимума. - Обёртки: неизменяемые представления
unmodifiableList,unmodifiableMapи синхронизированныеsynchronizedList,synchronizedMap. - Создание: пустые коллекции через
emptyList(), коллекция из одного элемента — черезsingletonList().
Пример кода
CollectionVsCollections.java
Collection<String> coll = new ArrayList<>(); // интерфейс Collection
List<String> list = new ArrayList<>(Arrays.asList("b", "a", "c"));
Collections.sort(list); // утилитный класс Collections
Collections.reverse(list);
List<String> ro = Collections.unmodifiableList(list); // неизменяемое представлениеЧто использовать на практике
- В полях и сигнатурах объявляйте интерфейс Collection или его наследников, а не конкретные классы.
- Операции над коллекциями (sort, shuffle, reverse, binarySearch) выполняйте через статические методы класса Collections.
- Неизменяемые и синхронизированные представления получайте через методы
unmodifiableList,synchronizedListи аналогичные обёртки.
Подводные камни
- Путаница между Collection и Collections — частая ошибка новичков: это интерфейс и утилитный класс, а не «класс и его множественная форма».
- Класс Collections не предназначен для наследования и создания экземпляров — у него приватный конструктор.
unmodifiableListвозвращает представление: изменение через него бросает UnsupportedOperationException, но исходный список остаётся изменяемым.
Как отвечать на собеседовании
- Разведите сущности: Collection — интерфейс-корень иерархии (List, Set, Queue) с контрактом size, add, remove, iterator → Collections — утилитный класс со статическими методами sort, shuffle, binarySearch и обёртками unmodifiableList, synchronizedList → завершите мнемоникой: Collection хранит элементы, Collections — инструменты, которые над ними работают.