Шаг 78.
Язык программирования Java.
Класс Collections

На этом шаге мы рассмотрим класс Collections

Все методы класса Collections статические, ими можно пользоваться, не создавая экземпляры класса Collections. Как обычно в статических методах, коллекция, с которой работает метод, задается его аргументом. Функций в данном классе большое количество, поэтому мы рассмотрим только некоторые из них, на наш взгляд наиболее часто используемые (с остальными функциями вы можете ознакомиться в документации):

Сортировка может быть сделана только в упорядочиваемой коллекции, реализующей интерфейс List. Для сортировки в классе Collections есть два метода:

После сортировки можно осуществить бинарный поиск в коллекции:

Следующие четыре метода находят наибольший и наименьший элементы в упорядочиваемой коллекции:

Следующие два метода "перемешивают" элементы коллекции в случайном порядке:

Также есть следующие функции для элементов коллекций:


Приведем ниже пример использования класса Collections.


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * Программа для демонстации использования класса Collections.
 * В данной программе сначала формируется список произвольных значений.
 * Потом этот список сортируется с помощью функции Collections.sort().
 * Далее QUERY_COUNT раз проверяется наличие произвольного значения в этом списке
 *                                       с помощью функции Collections.binarySearch().
 * На каждом запросе выводится результат key is found, если key есть в данном списке, 
 * и key is not found в противном случае.
 * */

public class Main {
    private static final int COUNT_ELEMENTS = 10;
    private static final int MAX_VALUE_ELEMENTS = 40;
    private static final int QUERY_COUNT = 20;

    /**
     * Фуникция для ввывода элементов списка
     * */
    private static <T> void printList(List<T> list) {
        for (T v : list) {
            System.out.print(" " + v);
        }
        System.out.println();
    }

    public static void main(String[] args) {
        /*Создаем список*/
        List<Integer> list = new ArrayList<>();

        /*Формируем список с произвольными значениями*/
        for (int i = 0; i < COUNT_ELEMENTS; i++) {
            int x = (int) (Math.random() * MAX_VALUE_ELEMENTS);
            list.add(x);
        }

        /*Выводим полученный список*/
        System.out.print("Исходный список:");
        printList(list);

        /*Сортируем исходный список*/
        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });

        /*Выводим отсортированный список*/
        System.out.print("Отсортированный список:");
        printList(list);

        /*Выполняем QUERY_COUNT запросов на поиск значения в списке*/
        System.out.println("Запросы на поиск элементов в списке");
        for (int i = 0; i < QUERY_COUNT; i++) {
            /*Формируем произвольное значение*/
            int key = (int) (Math.random() * MAX_VALUE_ELEMENTS);
            /*Ищем полученное значение в списке*/
            int pos = Collections.binarySearch(list, key, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o1.compareTo(o2);
                }
            });

            /*Если key есть в списке*/
            if (pos >= 0) {
                /*то выводим, что такой ключ есть*/
                System.out.println(key + " is found");
            } else {
                /*иначе, выводим, что такого ключа нет*/
                System.out.println(key + " is not found");
            }
        }

    }
}

Проект можно взять здесь


Рис. 1. Вывод программы


На следующем шаге мы рассмотрим класс Objects

Предыдущий шаг Содержание Следующий шаг