Интерфейсы Comparable и Comparator в Java

Comparable и Comparator являются интерфейсами и могут использоваться для сортировки элементов коллекции.

Comparable Comparator
Comparable обеспечивает единую последовательность сортировки. Другими словами, мы можем отсортировать коллекцию на основе одного элемента, такого как идентификатор, имя и цена. Comparator предоставляет несколько последовательностей сортировки. Другими словами, мы можем отсортировать коллекцию по нескольким элементам, таким как идентификатор, имя, цена и т. д.
Comparable влияет на исходный класс, т.е. модифицируется фактический класс. Comparator не влияет на исходный класс, т.е. фактический класс не изменяется.
Comparable предоставляет метод compareTo() для сортировки элементов. Comparator предоставляет метод compare() для сортировки элементов.
Comparable присутствует в пакете java.lang. Comparator присутствует в пакете java.util.
Мы можем отсортировать элементы списка типа Comparable методом Collections.sort(List). Мы можем отсортировать элементы списка типа Comparator методом Collections.sort(List, Comparator).

Пример использования Comparable

public class Person implements Comparable<Person> {

    int id;
    String name;
    int age;

    Person(int id, String name, int age){
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // Сортируем по возрасту
    public int compareTo(Person person){
        if(age == person.age)
            return 0;
        else if(age > person.age)
            return 1;
        else
            return -1;
    }
}

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

public class Main {
    public static void main(String args[]) {

        List<Person> persons = new ArrayList<>();

        persons.add(new Person(1, "Иван", 23));
        persons.add(new Person(6, "Андрей", 27));
        persons.add(new Person(5, "Ольга", 21));

        Collections.sort(persons);

        System.out.println("Сортировка по возрасту:");
        for(Person person : persons){
            System.out.println(person.id + " " 
                               + person.name + " " 
                               + person.age);
        }
    }
}

Вывод:

Сортировка по возрасту:
5 Ольга 21
1 Иван 23
6 Андрей 27

Пример использования Comparator

public class Person {

    int id;
    String name;
    int age;

    Person(int id, String name, int age){
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

import java.util.Comparator;

public class AgeComparator implements Comparator<Person> {
    public int compare(Person p1,Person p2) {
        if(p1.age == p2.age)
            return 0;
        else if(p1.age > p2.age)
            return 1;
        else
            return -1;
    }
}

import java.util.Comparator;

public class NameComparator implements Comparator<Person> {
    public int compare(Person p1,Person p2) {
        return p1.name.compareTo(p2.name);
    }
}

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

public class Main {
    public static void main(String args[]) {

        List<Person> persons = new ArrayList<>();

        persons.add(new Person(1, "Иван", 23));
        persons.add(new Person(6, "Андрей", 27));
        persons.add(new Person(5, "Ольга", 21));

        System.out.println("Сортировка по имени:");

        Collections.sort(persons, new NameComparator());

        for(Person person : persons){
            System.out.println(person.id + " " 
                               + person.name + " " 
                               + person.age);
        }

        System.out.println("Сортировка по возрасту:");

        Collections.sort(persons, new AgeComparator());

        for(Person person : persons){
            System.out.println(person.id + " " 
                               + person.name + " " 
                               + person.age);
        }
    }
}

Вывод:

Сортировка по имени:
6 Андрей 27
1 Иван 23
5 Ольга 21
Сортировка по возрасту:
5 Ольга 21
1 Иван 23
6 Андрей 27


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки