← Назад к вопросам
Классом или интерфейсом является Collections
2.2 Middle🔥 181 комментариев
#Основы Java
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Collections — утилитный класс Java Collections Framework
Collections — это финальный утилитный класс (не интерфейс), расположенный в пакете java.util. Он содержит статические методы для работы с коллекциями.
Определение и назначение
public final class Collections {
// Только статические методы, нет конструктора
private Collections() {
// Приватный конструктор — класс не может быть инстанцирован
}
// Статические методы для работы с коллекциями
public static <T> List<T> unmodifiableList(List<? extends T> list) { ... }
public static <T> void sort(List<T> list) { ... }
public static <T> int binarySearch(List<? extends T> list, T key) { ... }
// ... и много других
}
Collections — это паттерн Утилитный класс (Utility Class), содержащий вспомогательные методы для работы с коллекциями.
Основные методы Collections
1. Сортировка
List<Integer> numbers = new ArrayList<>(Arrays.asList(5, 2, 8, 1, 9));
// Естественная сортировка
Collections.sort(numbers); // [1, 2, 5, 8, 9]
// Обратная сортировка
Collections.sort(numbers, Collections.reverseOrder());
// [9, 8, 5, 2, 1]
// Кастомный компаратор
Collections.sort(numbers, (a, b) -> b.compareTo(a)); // [9, 8, 5, 2, 1]
2. Поиск
List<Integer> sorted = Arrays.asList(1, 2, 5, 8, 9);
// Бинарный поиск (для отсортированного списка)
int index = Collections.binarySearch(sorted, 5); // 2
// Поиск минимума и максимума
int min = Collections.min(numbers); // 1
int max = Collections.max(numbers); // 9
3. Неизменяемые коллекции (Immutable)
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
// Создаёт unmodifiable view
List<String> unmodifiable = Collections.unmodifiableList(list);
unmodifiable.add("D"); // UnsupportedOperationException!
// Пустые коллекции
List<String> emptyList = Collections.emptyList();
Set<String> emptySet = Collections.emptySet();
Map<String, Integer> emptyMap = Collections.emptyMap();
4. Синхронизированные коллекции
List<String> unsafeList = new ArrayList<>();
// Оборачивает в synchronized wrapper
List<String> syncList = Collections.synchronizedList(unsafeList);
// Теперь потокобезопасно
syncList.add("элемент"); // Синхронизировано
// Аналогично для других типов
Map<String, Integer> syncMap = Collections.synchronizedMap(new HashMap<>());
5. Перестановки и наполнение
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
// Случайная перестановка (shuffle)
Collections.shuffle(list); // [4, 1, 5, 2, 3]
// Циклическая ротация
Collections.rotate(list, 2); // [2, 3, 4, 1, 5]
// Заполнение одинаковыми значениями
Collections.fill(list, 0); // [0, 0, 0, 0, 0]
// Нахождение вхождений
int freq = Collections.frequency(list, 0); // 5
Различие между Collections и Collection
Не путай Collections с Collection:
// Collection — интерфейс (иерархия)
public interface Collection<E> extends Iterable<E> { ... }
// Collections — утилитный класс со статическими методами
public final class Collections { ... }
Отличие от Collections.sort() и Arrays.sort()
List<Integer> list = Arrays.asList(5, 2, 8);
int[] array = {5, 2, 8};
// Collections.sort() — для Lists
Collections.sort(list); // ✓
// Arrays.sort() — для массивов
Arrays.sort(array); // ✓
Ключевые особенности
- Финальный класс — не может быть наследован
- Приватный конструктор — не может быть инстанцирован
- Только статические методы — вызываются через имя класса
- Потокоопасность — synchronized методы создают thread-safe обёртки
- Неизменяемость — методы unmodifiable создают read-only views
Collections — это фундаментальная часть Java Collections Framework, предоставляющая удобные утилиты для работы с коллекциями.