比较器和可比较的有什么区别?

时间:2014-03-27 15:52:35

标签: java

我需要通过适当的例子来理解可比较和比较之间的差异。我看过几本书,但差别不明确。

2 个答案:

答案 0 :(得分:5)

Comparable接口:要排序的对象必须实现此接口的类。在这里,我们必须实现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的对象可以用作TreeMap等SortedMap中的键,也可以像TreeSet一样使用SortedSet,而无需实现任何其他接口。

Comparator接口:要对其排序的对象不需要实现此接口的类。一些第三类可以实现此接口sort.e.g.StateSortByIdComparator类可以通过id实现Comparator接口对状态对象的集合进行排序。例如:

 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 ;
    }

 }

答案 1 :(得分:0)

Comparable定义类的实例具有自然顺序,例如数字可以从小到大排序。在其他情况下,这定义了默认排序,例如使用字符串时。

另一方面,Comparator是一个可能定义非标准排序的对象,例如,您可以提供一个比较器来对数字进行从大到小的排序。例如。