Java — Самоучитель

  • 15. Java — Массивы
  • 16. Java — Дата и время
  • 17. Java — Регулярные выражения
  • 18. Java — Методы
  • 21. Java — Вложенные и внутренние классы
  • 22. Java — Наследование
  • 23. Java — Переопределение
  • 24. Java — Полиморфизм
  • 25. Java — Абстракция
  • 26. Java — Инкапсуляция
  • 27. Java — Интерфейсы
  • 28. Java — Пакеты
  • 31. Java — Дженерики
  • 32. Java — Сериализация
  • 30.22. Java – Comparator

    И TreeSet, и TreeMap хранят элементы в отсортированном порядке. Однако именно компаратор в Java точно определяет, что такое отсортированный порядок.

    Методы

    Интерфейс Comparator в Java определяет два метода: compare() и equals(). Метод compare(), показанный здесь, сравнивает два элемента:

    Метод Compare

    int compare(Object obj1, Object obj2)
    

    obj1 и obj2 - объекты, которые нужно сравнить. Этот метод возвращает ноль, если объекты равны. Он возвращает положительное значение, если obj1 больше, чем obj2. В противном случае возвращается отрицательное значение. При переопределении compare() вы можете изменить способ упорядочивания объектов. Например, для сортировки в обратном порядке вы можете создать компаратор, который изменит исход сравнения.

    Метод Equals

    Метод equals(), показанный здесь, проверяет, равен ли объект вызывающему компаратору.

    boolean equals(Object obj)
    

    obj - объект, подлежащий проверке на равенство. Метод возвращает true, если obj и вызывающий объект являются объектами Comparator и используют один и тот же порядок. В противном случае возвращается false.

    Переопределять equals () не нужно, и большинство простых компараторов этого не сделают.

    Пример

    import java.util.*;
    
    class Dog implements Comparator, Comparable {
       private String name;
       private int age;
       Dog() {
       }
    
       Dog(String n, int a) {
          name = n;
          age = a;
       }
    
       public String getDogName() {
          return name;
       }
    
       public int getDogAge() {
          return age;
       }
    
       // Переопределяем метод compareTo
       public int compareTo(Dog d) {
          return (this.name).compareTo(d.name);
       }
    
       // Переопределяем метод compare для сортировки возраста 
       public int compare(Dog d, Dog d1) {
          return d.age - d1.age;
       }
    }
    
    public class Example {
    
       public static void main(String args[]) {
          // Берём список элементов Dog
          List list = new ArrayList();
    
          list.add(new Dog("Шегги", 3));
          list.add(new Dog("Лэси", 2));
          list.add(new Dog("Роджер", 10));
          list.add(new Dog("Томми", 4));
          list.add(new Dog("Тамми", 1));
          Collections.sort(list);   // Сортируем список массивов
    
          for(Dog a: list)   // Выводим сортированный список имён
             System.out.print(a.getDogName() + ", ");
    
          // Сортируем список массивов, используя компаратор
          Collections.sort(list, new Dog());
          System.out.println(" ");
          
          for(Dog a: list)   // Выводим сортированный список возрастов
             System.out.print(a.getDogName() +"  : "+ a.getDogAge() + ", ");
       }
    }
    

    Получим следующий результат:

    Лэси, Роджер, Шэгги, Тамми, Томми,
    Тамми  : 1, Лэси  : 2, Лэси  : 3, Томми  : 4, Роджер  : 10,
    

    Примечание: сортировка класса Arrays аналогична классу Collections.

    Поделитесь:

    О сайте

    Все материалы сайта proglang.su являются результатом труда его авторов. Копирование материалов в некоммерческих целях без указания источника в виде прямой ссылки на сайт proglang.su запрещено. Использование материалов в коммерческих целях разрешено только с письменного согласия автора. Нарушение авторских прав преследуется по закону. Мы это делаем, чтобы защитить плоды своих трудов от воровства. © 2014-2019

    Присоединяйтесь


    Обратная связь