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

Комментарии (382)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Grigoryvvv Уровень 26 Expert
26 января 2026
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 Уровень 26 Expert
26 января 2026
Для более полного понимания посмотрите видеоурок 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 Уровень 26 Expert
26 января 2026
- код становится гибким - можно легко заменить реализацию на другой класс

List<String> list = new LinkedList<>();
- при этом остальной код менять не нужно. Таким образом интерфейсы нужны: - чтобы код был гибким; - чтобы можно было менять реализацию, не меняя остальной код; - чтобы разные классы имели общее поведение. • Ещё не путайте Collection и Collections Collection — интерфейс Collections — утилитный класс Collections — НЕ родитель и НЕ потомок Collections принимает List (и другие коллекции) в свои методы как аргументы
C0N5P1RACY Уровень 42
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 Уровень 42
20 декабря 2025
Привет, ГПТ в основном всегда, прошу его объяснить, так же читаю дополнительные лекции на самом javarush, иногда на ютубе ищу что то о теме, но из видосов инфы как будто меньше получается черпать Еще есть книжка по Java, которую все рекомендуют, с чувачком в очках, но ее пока серьезно не начал читать
Raskum S Уровень 1
26 декабря 2025
Поддержу, на ГПТ даже проект под это все завел. Чтобы не терять цепочку. Только с ГПТ общаюсь без кода, очень помогает.
Adam Уровень 13
8 апреля 2026
А что лучше из всех нейронок для изучения java? ГПТ, дипсик, алиса, гемини - всех их использую бывает, но фаворита пока не выявил. Может кто тут поплотнее нейронки гоняет и может подсказать на какой из них остановить свой выбор?)
Кирилл Уровень 103
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
Виктор Уровень 28
14 июня 2025
Было бы интересно если код и название метода были перепутанны.
Семён Уровень 1
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"? Равно. Отлично! Вот и нашли