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

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

Java Syntax Pro
13 уровень , 2 лекция
Открыта

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)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
C0N5P1RACY Уровень 21
20 декабря 2025
Объяснение для тех, у кого возникли трудности в понимании метода 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
Всем здравствуйте, хотелось бы узнать, кто какие источники использует для подкрепления материала, особенно для практики. Просто не всегда можно найти задачи на определенные темы, например, на codewars
C0N5P1RACY Уровень 21
20 декабря 2025
Привет, ГПТ в основном всегда, прошу его объяснить, так же читаю дополнительные лекции на самом javarush, иногда на ютубе ищу что то о теме, но из видосов инфы как будто меньше получается черпать Еще есть книжка по Java, которую все рекомендуют, с чувачком в очках, но ее пока серьезно не начал читать
Raskum S Уровень 22
26 декабря 2025
Поддержу, на ГПТ даже проект под это все завел. Чтобы не терять цепочку. Только с ГПТ общаюсь без кода, очень помогает.
Кирилл Уровень 37
9 ноября 2025
Очень кайфовая лекция с точки зрения задач и примеров. Очень круто видеть внутрянку каждого метода изначально, а уже потом этот метод применять в упрощённой и красивой форме
invoker main Уровень 42
19 сентября 2025
расстроило отсутствие сложных задач...
11 ноября 2025
как ты за полтора месяца с 14 уровня до 42 дошел😳
invoker main Уровень 42
19 ноября 2025
скипал многое для материи, а так , 2-4 часа в день
invoker main Уровень 42
19 сентября 2025
расстроило отсутствие сложных задач...
23 августа 2025
В программировании есть начало когда начинаешь изучать программирование, а про конец можешь забыть, его нет! Удачи и терпения тем, кто не ищет легких путей :)
Anonymous #3585174 Уровень 33
4 июля 2025
like
Виктор Уровень 25
14 июня 2025
Было бы интересно если код и название метода были перепутанны.
Семён Уровень 69
23 февраля 2025
как работает бинарный поиск из последней задачи: У тебя есть колекция. Допустим: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} И тебе над найти элемент Х. Допустим, это будет "2". В этой колекции есть минимальный элемент "1", максимальный элемент "10" и средний элемент "5" Ты сначала сравниваешь средний элемент "5" с Х. Если совпало - збс, ты нашел. Если нет: То этот элемент Х может быть больше срединного элементе или меньше. Если он меньше - то ты будешь искать его в левой половине коллекции, если больше - в правой половине. В моем примере элемент Х это "2". А срединный элемент "5". Элемент Х меньше срединного, значит я буду продолжать поиск в левой половине коллекции. А правую половину отбрасываем нахрен. {1, 2, 3, 4, 5} Теперь в этой левой половине есть минимальный эелемент "1", и есть максимальный элемент. Максимальным элементом теперь будет тот самый срединный элемент "5". Новым срединным элементом теперь будет "3". И снова сравниваем элемент Х с срединным элементом. "2" равно "3"? нет. "2" меньше "3"? да. Значит продолжаем искать в левой половине коллекции. И отбрасываем к чертям собачим все, что справа: {1, 2, 3} Теперь в этой левой половине есть минимальный эелемент "1", и есть максимальный элемент. Максимальным элементом теперь будет тот самый срединный элемент "3". Новым срединным элементом теперь будет "2". И снова сравниваем элемент Х с срединным элементом. "2" равно "2"? Равно. Отлично! Вот и нашли
Anonymous #3312942 Уровень 32
12 февраля 2025
Если вы хотите сделать глубокое копирование коллекции, не задумываясь о её размерности при использовании метода Collections.copy(src,dest). Просто создайте новую коллекцию:

        ArrayList<Integer> integers = new ArrayList<>(){{
     // ... список элементов
        }};
 ArrayList<Integer> copyIntegers = new ArrayList<>(integers);
Ставь лайк, если было полезно.