Я реализую общий класс кучи в Java. Для этого класса есть два конструктора, один из которых является конструктором по умолчанию без параметров. Другой принимает объект сравнения, который пользователь может передать, чтобы пользователь мог контролировать, как сравниваются элементы кучи. Теперь, если пользователь использует конструктор по умолчанию, я хочу, чтобы мой класс использовал объект компаратора по умолчанию. Метод сравнения этого объекта просто вызывает метод compareTo() (часть интерфейса Comparable). Есть ли способ сделать это и если да, то как?
Написание класса Comparator по умолчанию в Java
Ответы (4)
Я предполагаю, что общий компаратор будет выглядеть так:
public class ComparableComparator<T extends Comparable<T>> implements Comparator<T> {
@Override
public int compare(T lhs, T rhs) {
return lhs.compareTo(rhs);
}
}
person
Vincent Mimoun-Prat
schedule
20.10.2012
разве это не должно быть Comparable‹T›?
- person DaveFar; 21.10.2012
Используйте ComparableComparator
из Apache Commons. который берет два произвольных Object
и сравнивает их, реализуют ли они Comparable
.
В качестве альтернативы конструктор, который не принимает компаратор, должен применять параметр типа K extends Comparable<K>
.
person
Tomasz Nurkiewicz
schedule
20.10.2012
В Java 8 есть Comparator.naturalOrder()
, который вы можете использовать в качестве компаратора по умолчанию. См. API java.util.Comparator для подробностей.
person
Vivit
schedule
30.11.2016
Guava обеспечивает "естественное упорядочение" Comparator
как - достаточно предсказуемо - Ordering.natural()
.
person
Louis Wasserman
schedule
20.10.2012