Освой программирование играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Многие классы уже реализуют интерфейс Comparable. Вы и сами можете его реализовать в своём классе. Но может возникнуть ситуация, когда вы хотите реализовать новый способ сортировки, а класс уже содержит интерфейс, который вы не сможете переопределить. В таком случае используйте компаратор - экземляр класса, реализующий интерфейс Comparator.
public interface Comparator<T> {
int compare(T first, T second);
}
Например, мы хотим сравнивать строки по длине, а не по алфавиту. Определим новый класс с нужным интерфейсом.
class LengthComparator implements Comparator<String> {
public int compare(String first, String second) {
return first.length() - second.length();
}
}
Теперь можем произвести сравнение.
Comparator<String> comparator = new LengthComparator();
if(comparator.compare(words[i], words[j]) > 0) ... // сравнение
Не путайте с методом words[i].compareTo(words[j]), который вызывается для строки.
Чтобы отсортировать массив, передаём объект типа LengthComparator методу Arrays.sort():
String[] cats = {"Barsik", "Murzik", "Vasya"};
Arrays.sort(cats, new LengthComparator());