Освой программирование играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Интерфейс Comparator

Многие классы уже реализуют интерфейс 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());
Реклама