Методы сортировки в Java

JavaBeginner
Практиковаться сейчас

Введение

Сортировка — это фундаментальная операция в информатике, и Java предоставляет различные встроенные методы для упорядочивания данных в разных структурах. В Java существуют специализированные классы для сортировки различных типов структур данных. В этой лабораторной работе мы рассмотрим сортировку массивов, коллекций и экземпляров пользовательских классов.

Сортировка массивов

Массивы — это простая структура данных, используемая для хранения однотипных элементов в упорядоченном виде. Мы можем сортировать массивы с помощью встроенного метода sort() класса Arrays.

Создайте или перезапишите файл Sorting.java в директории ~/project, добавив в него следующий код:

import java.util.Arrays;

public class Sorting {
    public static void main(String[] args) {
        int[] arr = {7, 9, 1, 0, 2, 5, 6, 11};
        System.out.println("Array Before Sorting: " + Arrays.toString(arr));
        Arrays.sort(arr);
        System.out.println("Array After Sorting: " + Arrays.toString(arr));
    }
}

Чтобы запустить этот код, перейдите в директорию ~/project в терминале и выполните следующие команды:

javac Sorting.java
java Sorting

Этот код отсортирует массив в порядке возрастания. Если вам нужно отсортировать массив в порядке убывания, необходимо использовать интерфейс Comparator.

Сортировка коллекций

В Java предусмотрен класс Collections, который содержит метод sort() для сортировки таких коллекций, как списки (lists), множества (sets) и отображения (maps). Принцип работы этой функции аналогичен методу sort() класса Arrays.

Создайте или перезапишите файл Sorting.java в директории ~/project, добавив в него следующий код:

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

public class Sorting {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(6);
        list.add(3);
        list.add(8);
        list.add(1);
        list.add(9);

        System.out.println("List before sorting: " + list);

        Collections.sort(list);
        System.out.println("List after sorting: " + list);
    }
}

Чтобы запустить этот код, перейдите в директорию ~/project в терминале и выполните следующие команды:

javac Sorting.java
java Sorting

Сортировка множеств

Множества (Sets) используются для хранения неупорядоченных данных без дубликатов. Мы не можем напрямую отсортировать множество с помощью метода sort() класса Collections. Однако мы можем получить упорядоченные данные, перенеся все элементы множества в список, а затем отсортировав этот список.

Создайте или перезапишите файл Sorting.java в директории ~/project, добавив в него следующий код:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Sorting {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<Integer>();
        set.add(6);
        set.add(3);
        set.add(-2);
        set.add(1);
        set.add(9);

        List<Integer> list = new ArrayList<Integer>(set);
        Collections.sort(list);
        System.out.println("Set after sorting: " + list);
    }
}

Чтобы запустить этот код, перейдите в директорию ~/project в терминале и выполните следующие команды:

javac Sorting.java
java Sorting

Результатом выполнения этого кода будет отсортированный список целых чисел.

Сортировка отображений

Отображения (Maps) используются для хранения пар «ключ-значение». Мы можем сортировать их на основе ключей или значений. Также можно использовать TreeMap для хранения пар «ключ-значение» в отсортированном по ключам порядке.

Создайте или перезапишите файл Sorting.java в директории ~/project, добавив в него следующий код:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Sorting {
    public static void main(String[] args) {
        Map<Integer, String> map = new TreeMap<Integer, String>();
        map.put(6, "Apple");
        map.put(3, "Banana");
        map.put(1, "Mango");
        map.put(9, "Orange");

        System.out.println("Map before sorting: " + map);

        // Sorting by keys
        Map<Integer, String> sortedByKeyMap = new TreeMap<Integer, String>(map);
        System.out.println("Map after sorting by keys: " + sortedByKeyMap);

        // Sorting by value
        List<Map.Entry<Integer, String>> list = new ArrayList<Map.Entry<Integer, String>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
            public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
                return (o1.getValue()).compareTo(o2.getValue());
            }
        });

        Map<Integer, String> sortedByValueMap = new LinkedHashMap<Integer, String>();
        for (Map.Entry<Integer, String> entry : list) {
            sortedByValueMap.put(entry.getKey(), entry.getValue());
        }
        System.out.println("Map after sorting by values: " + sortedByValueMap);
    }
}

Чтобы запустить этот код, перейдите в директорию ~/project в терминале и выполните следующие команды:

javac Sorting.java
java Sorting

Этот код демонстрирует сортировку отображения как по ключам, так и по значениям.

Резюме

В этой лабораторной работе мы рассмотрели способы сортировки различных структур данных в Java. Мы научились сортировать массивы, коллекции и отображения. Мы также разобрали, как сортировать объекты пользовательских классов с помощью интерфейсов Comparable и Comparator. Для сортировки списков и массивов мы использовали метод sort() классов Collections и Arrays. Наконец, мы изучили методы сортировки отображений на основе их значений и ключей.