This question already has answers here:
Java : Comparable vs Comparator [duplicate]
(2个答案)
5年前关闭。
我需要通过适当的例子来理解可比和比较器之间的差异。我看过几本书,但区别对我来说还不清楚。
如果任何类实现可比的接口,则可以使用Collection.sort()或Arrays.sort()自动对该对象的集合进行排序。对象将基于该类中的compareTo方法进行排序。
在Java中实现Comparable的对象可以用作SortedMap(如TreeMap)或SortedSet(如TreeSet)中的键,而无需实现任何其他接口。
Comparator接口:要对其进行排序的对象的类不需要实现此接口。一些第三类可以实现此接口进行排序,例如StateSortByIdComparator类可以实现Comparator接口以按ID对状态对象的集合进行排序。例如:
(2个答案)
5年前关闭。
我需要通过适当的例子来理解可比和比较器之间的差异。我看过几本书,但区别对我来说还不清楚。
最佳答案
可比接口:要对其进行排序的对象的类必须实现此接口。在此,我们必须实现compareTo(Object)方法。
例如:
public class State implements Comparable{
@Override
public int compareTo(Object arg0) {
State state=(State) arg0;
return (this.stateId < state.stateId ) ? -1: (this.stateId > state.stateId ) ? 1:0 ;
}}
如果任何类实现可比的接口,则可以使用Collection.sort()或Arrays.sort()自动对该对象的集合进行排序。对象将基于该类中的compareTo方法进行排序。
在Java中实现Comparable的对象可以用作SortedMap(如TreeMap)或SortedSet(如TreeSet)中的键,而无需实现任何其他接口。
Comparator接口:要对其进行排序的对象的类不需要实现此接口。一些第三类可以实现此接口进行排序,例如StateSortByIdComparator类可以实现Comparator接口以按ID对状态对象的集合进行排序。例如:
public class StateSortByIdComparator implements Comparator<State>{
@Override
public int compare(State state1, State state2) {
return (state1.getStateId() < state2.getStateId() ) ? -1: (state1.getStateId() > state2.getStateId() ) ? 1:0 ;
}
}
10-08 01:30