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() визначає, скільки разів зустрічається елемент obj у колекції colls

Код Виведення на екран
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