This question already has answers here:
Java : Comparable vs Comparator [duplicate]
                                
                                    (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