Інтерфейс Comparator (порівнювач) визначає два методи порівняння:
compare(o1, o2) — повертає 0, якщо об'єкти o1 і o2 тотожні. Повертає додатне значення, якщо o1 більше ніж o2. Інакше повертає від'ємне значення. Перевизначенням методу можна змінити спосіб упорядкування об'єктів. Наприклад, для упорядкування у зворотному порядку.
equals(o) — повертає true, якщо об'єкти o і той, що викликає метод, є об'єктами Comparator і тотожні відносно використаного відношення порядку. Інакше повертаєть false.
package work; import java.util.*; class Dog implements Comparator<Dog>, Comparable<Dog> { private String name; private int age; Dog() { } Dog (String s, int n) { name = s; age = n; } public String getDogName() { return name; } public int getDogAge() { return age; } @Override public int compareTo(Dog d){ return(this.name).compareTo(d.name); } @Override public int compare(Dog d1, Dog d2) { return d1.age-d2.age;} } public class Work { public static void main(String args[]) { ArrayList<Dog> a = new ArrayList<Dog>(); a.add(new Dog("Сірко", 4)); a.add(new Dog("Лиско",10)); a.add(new Dog("Бровко",7)); a.add(new Dog("Рябко", 8)); for (Dog b: a) System.out.print(b.getDogName() + " "); System.out.println(); Collections.sort(a); for (Dog b: a) System.out.print(b.getDogName() + " "); System.out.println(" "); Collections.sort(a, new Dog()); for (Dog b: a) System.out.print(b.getDogName() +" : " + b.getDogAge() + " "); System.out.println(" "); } }з таким виведенням.
Сірко Лиско Бровко Рябко Бровко Лиско Рябко Сірко Сірко : 4 Бровко : 7 Рябко : 8 Лиско : 10