JavaRush/Курсы/Java Syntax Pro/Вспомогательный класс Collections

Вспомогательный класс Collections

Открыта

1. Список методов

Помните, что разработчики Java для удобства работы с массивами написали целый класс-помощник — Arrays?

Для коллекций они сделали то же самое. В Java есть класс java.util.Collections, у которого очень много методов, полезных при работе с коллекциями. Ниже приведем только самые интересные из них:

Методы Описание
addAll(colls, e1, e2, e3, ..)
Добавляет в коллекцию colls элементы e1, e2, e3,...
fill(list, obj)
Заменяет в переданном списке все элементы на obj
nCopies(n, obj)
Возвращает список, состоящий из n копий объекта obj
replaceAll(list, oldVal, newVal)
Заменяет в списке list все значения oldVal на newVal
copy(dest, src)
Копирует все элементы из списка src в список dest
reverse(list)
Разворачивает список задом наперед
sort(list)
Сортирует список в порядке возрастания
rotate(list, n)
Циклично сдвигает элементы списка list на n элементов
shuffle(list)
Случайно перемешивает элементы списка
min(colls)
Находит минимальный элемент коллекции colls
max(colls)
Находит максимальный элемент коллекции colls
frequency(colls, obj)
Определяет, сколько раз элемент obj встречается в коллекции colls
binarySearch(list, key)
Ищет элемент key в отсортированном списке, возвращает индекс.
disjoint(colls1, colls2)
Возвращает true, если у коллекций нет общих элементов
Важно:

Многие из этих методов работают не с классами ArrayList, HashSet и HashMap, а с их интерфейсами: Collection<T>, List<T>, Map<K, V>.

Это не проблема: если метод принимает List<T>, в него всегда можно передать ArrayList<Integer>, но вот в обратную сторону присваивание не работает.


2. Создание и изменение коллекций

Метод Collections.addAll(Collection<T> colls, T e1, T e2, T e3, ...)

Метод addAll() добавляет в коллекцию colls элементы e1, e2, e3, ... Количество переданных элементов может быть любым.

Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5);

for (int i: list)
   System.out.println(i);
1
2
3
4
5

Метод Collections.fill(List<T> list, T obj)

Метод fill() заменяет все элементы коллекции list на элемент obj.

Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

Collections.fill(list, 10);

for (int i: list)
   System.out.println(i);
10
10
10

Метод Collections.nCopies (int n, T obj)

Метод nCopies() возвращает список из n копий элементов obj. Список можно назвать фиктивным (реального массива внутри нет), поэтому изменять его нельзя! Можно использовать только для чтения.

Код Описание
List<String> fake = Collections.nCopies(5, "Привет");

ArrayList<String> list = new ArrayList<String>(fake);

for(String s: list)
   System.out.println(s);
Создаем неизменяемый список из 5 элементов Привет
Создаем реальный список list, заполняем его значениями из списка fake.

Выводим на экран:
Привет
Привет
Привет
Привет
Привет

Метод Collections.replaceAll (List<T> list, T oldValue, T newValue)

Метод replaceAll() заменяет все элементы коллекции list, равные oldValue, на элемент newValue.

Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

Collections.replaceAll(list, 2, 20);

for (int i: list)
   System.out.println(i);
1
20
3

Метод Collections.copy (List<T> dest, List<T> src)

Метод copy() копирует все элементы коллекции src в коллекцию dest.

Если изначально коллекция dest длиннее чем коллекция src, то оставшиеся элементы в коллекции dest останутся нетронутыми.

Важно:
Коллекция dest должна иметь длину не меньше, чем длина коллекции src (иначе кинется исключение IndexOutOfBoundsException).
Код Вывод на экран
ArrayList<Integer> srcList = new ArrayList<Integer>();
Collections.addAll(srcList, 99, 98, 97);

ArrayList<Integer> destList = new ArrayList<Integer>();
Collections.addAll(destList, 1, 2, 3, 4, 5, 6, 7);

Collections.copy(destList, srcList);

for (int i: destList)
   System.out.println(i);
99
98
97
4
5
6
7


3. Порядок элементов

Метод Collections.reverse(List<T> list)

Метод reverse() меняет порядок переданных в него элементов списка на обратный.

Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5);

Collections.reverse(list);

for (int i: list)
   System.out.println(i);
5
4
3
2
1

Метод Collections.sort(List<T> list)

Метод sort() сортирует переданный в него список по возрастанию.

Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15);

Collections.sort(list);

for (int i: list)
   System.out.println(i);
2
4
11
15
23

Метод Collections.rotate(List<T> list, int distance)

Метод rotate() циклическим образом сдвигает переданные в него элементы на distance позиций вперед.

Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9);

Collections.rotate(list, 3); // сдвинуть на 3 позиции

for (int i: list)
   System.out.println(i);
7
8
9
1
2
3
4
5
6

Метод Collections.shuffle(List<T> list)

Метод shuffle() случайным образом перемешивает все элементы переданного списка. Результат каждый раз разный.

Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5);

Collections.shuffle(list); // перемешиваем

for (int i: list)
   System.out.println(i);
5
2
4
3
1


4. Поиск элементов в коллекциях

Метод Collections.min(Collection<T> colls)

Метод min() возвращает минимальный элемент коллекции.

Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15);

int min = Collections.min(list);

System.out.println(min);
2

Метод Collections.max(Collection<T> colls)

Метод max() возвращает максимальный элемент коллекции.

Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15);

int max = Collections.max(list);

System.out.println(max);
23

Метод Collections.frequency(Collection<T> colls, T obj)

Метод frequency() подсчитывает, сколько раз в коллекции colls встречается элемент obj

Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 4, 15, 4, 2, 4);

int count = Collections.frequency(list, 4);

System.out.println(count);
3

Метод Collections.binarySearch(List<T> list, T key)

Метод binarySearch() ищет элемент key в списке list. Возвращает номер найденного элемента. Если элемент не найден, возвращает отрицательное число.

Важно:
Перед вызовом метода binarySearch() список нужно отсортировать ( Collections.sort()).
Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 11, 2, 23, 5, 15, 4, 2, 4);

Collections.sort(list);  // 2, 2, 4, 4, 5, 11, 15, 23

int index = Collections.binarySearch(list, 5);    // 4
System.out.println(index);

int index2 = Collections.binarySearch(list, 15);  // 6
System.out.println(index2);

int index3 = Collections.binarySearch(list, 16);  // нет
System.out.println(index3);
4
6
-8

Метод Collections.disjoint(Collection<T> coll1, Collection<T> coll2)

Метод disjoint() возвращает true, если у переданных коллекций нет одинаковых элементов.

Код Вывод на экран
ArrayList<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7);

ArrayList<Integer> list2 = new ArrayList<Integer>();
Collections.addAll(list2, 99, 98, 97);

boolean isDifferent = Collections.disjoint(list, list2);
System.out.println(isDifferent);
true

Комментарии (383)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Euraks Backend Developer
29 сентября, 15:43
Важно запомнить что Collection это интерфейс от которого идут все (HashMap не коллекция) все коллекции. Collections с s на конце это утилитный класс !!! который содержит методы для работы с коллекциями. это прям важно так как легко запутаться
Grigoryvvv
Уровень 28
Expert
26 января, 17:25
03.02.2026 / 14 уровень • Многих ввело в ступор: "Важно. Многие из этих методов работают не с классами ArrayList, HashSet и HashMap, а с их интерфейсами: Collection<T>, List<T>, Map<K, V>. Что такое интерфейс на пальцах? Интерфейс в Java, как и class, это такой же отдельный файл . Он даже создаётся в IntelliJ IDEA подобно отдельному классу: Main Menu -> File -> New -> Java Class ->, только далее мы выбираем Interface, а не Class. В файле interface указываются только названия различных методов, без кода в фигурных скобках. А реализацию этих методов мы записываем уже в классах, где указывает тоже самое название метода, а также код этого метода в фигурных скобках. В классе указываем что он реализует определенный интерфейс с помощью слова implements(реализует) покажем одним файлом для наглядности
public interface List<T> {

    boolean add(T e);

    T get(int index);

    // ...
}


public class ArrayList<T> implements List<T> {

    @Override
    public boolean add(T e) {
        // реализация
        return true;
    }

    @Override
    public T get(int index) {
        // реализация
        return T;
    }

    // ...
}
Символы: Параметр Что означает Где чаще встречается T Type (тип) общий шаблон K Key (ключ) карты (Map) V Value (значение) карты (Map) N Number числа T - обозначает какой-либо тип . ArrayList<Т>, вместо Т можно подставить любой тип, например ArrayList<String>.
Grigoryvvv
Уровень 28
Expert
26 января, 17:57
Для более полного понимания посмотрите видеоурок Java для начинающих. Урок 26: Интерфейсы Цепочка наследований: Iterable (интерфейс) Map (интерфейс) ← не Collection и не Iterable │ ├── HashMap Collection (интерфейс) ├── LinkedHashMap (классы) / | \ └── TreeMap List Set Queue (интерфейсы) | | | | | ├── PriorityQueue | | ├── ArrayDeque (классы) | | └── LinkedList | | | ├── HashSet | ├── LinkedHashSet (классы) | └── TreeSet | ├── ArrayList ├── LinkedList (классы) └── Vector • Ещё одна строчка вводящая в ступор: Если метод принимает List<T>, в него всегда можно передать ArrayList<Integer>, но вот в обратную сторону присваивание не работает. Мы помним из лекции "Сравнение объектов", что когда мы наследовали класс от другого суперкласса с помощью слова extends
public class Cat extends Animal {
    //...
}
мы могли могли выполнить восходящее преобразование типа ссылочной переменной объекта класса до типа суперкласса:
Animal cat = new Cat();
В случаем с реализацией классом определенного интерфейса с помощью слова implements(реализует), мы так же можем выполнить восходящее преобразование типа ссылочной переменной объекта класса до типа интерфейса:
List<String> list = new ArrayList<>();
Grigoryvvv
Уровень 28
Expert
26 января, 19:41
- код становится гибким - можно легко заменить реализацию на другой класс
List<String> list = new LinkedList<>();
- при этом остальной код менять не нужно. Таким образом интерфейсы нужны: - чтобы код был гибким; - чтобы можно было менять реализацию, не меняя остальной код; - чтобы разные классы имели общее поведение. • Ещё не путайте Collection и Collections Collection — интерфейс Collections — утилитный класс Collections — НЕ родитель и НЕ потомок Collections принимает List (и другие коллекции) в свои методы как аргументы
C0N5P1RACY QA Automation Engineer
20 декабря 2025, 15:14
Объяснение для тех, у кого возникли трудности в понимании метода rotate: Циклически сдвигает элементы списка (список ведёт себя как кольцо).
1 → 2 → 3 → 4 → 5
↑_______________↓
distance > 0 — сдвиг вправо последние distance элементов переносятся в начало distance < 0 — сдвиг влево первые элементы уходят в конец Элементы не теряются — они просто бегают по кругу. Если distance больше размера списка, используется distance % size. (Если заданное значение больше чем длина самого списка, то находится остаток от деления заданного значения на длину списка, и этот остаток и станет distance) Пример:
[1, 2, 3, 4, 5]
rotate(list, 2) → [4, 5, 1, 2, 3]
rotate(list, -2) → [3, 4, 5, 1, 2]
Anonymous #3541949
Уровень 14
1 декабря 2025, 11:54
Всем здравствуйте, хотелось бы узнать, кто какие источники использует для подкрепления материала, особенно для практики. Просто не всегда можно найти задачи на определенные темы, например, на codewars
C0N5P1RACY QA Automation Engineer
20 декабря 2025, 14:57
Привет, ГПТ в основном всегда, прошу его объяснить, так же читаю дополнительные лекции на самом javarush, иногда на ютубе ищу что то о теме, но из видосов инфы как будто меньше получается черпать Еще есть книжка по Java, которую все рекомендуют, с чувачком в очках, но ее пока серьезно не начал читать
Raskum S
Уровень 1
26 декабря 2025, 07:40
Поддержу, на ГПТ даже проект под это все завел. Чтобы не терять цепочку. Только с ГПТ общаюсь без кода, очень помогает.
Adam QA Automation Engineer
8 апреля, 09:35
А что лучше из всех нейронок для изучения java? ГПТ, дипсик, алиса, гемини - всех их использую бывает, но фаворита пока не выявил. Может кто тут поплотнее нейронки гоняет и может подсказать на какой из них остановить свой выбор?)
КириллQA Engineer в Sogaz-OMS
9 ноября 2025, 20:32
Очень кайфовая лекция с точки зрения задач и примеров. Очень круто видеть внутрянку каждого метода изначально, а уже потом этот метод применять в упрощённой и красивой форме
invoker main
Уровень 42
19 сентября 2025, 12:52
расстроило отсутствие сложных задач...
11 ноября 2025, 20:55
как ты за полтора месяца с 14 уровня до 42 дошел😳
invoker main
Уровень 42
19 ноября 2025, 21:09
скипал многое для материи, а так , 2-4 часа в день
invoker main
Уровень 42
19 сентября 2025, 12:52
расстроило отсутствие сложных задач...
23 августа 2025, 14:29
В программировании есть начало когда начинаешь изучать программирование, а про конец можешь забыть, его нет! Удачи и терпения тем, кто не ищет легких путей :)
Anonymous #3585174
Уровень 33
4 июля 2025, 15:47
like
Виктор
Уровень 28
14 июня 2025, 08:42
Было бы интересно если код и название метода были перепутанны.