java - comparator 和 comparable 之间有什么区别?

标签 java

<分区>

我需要通过适当的例子来理解 comparable 和 comparator 之间的区别。我看过几本书,但我不清楚其中的区别。

最佳答案

Comparable接口(interface):要排序的对象必须实现该接口(interface)的类。在此,我们必须实现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 ;
}}

如果任何类实现了可比接口(interface),那么可以使用 Collection.sort() 或 Arrays.sort() 自动对该对象的集合进行排序。对象将根据该类中的 compareTo 方法进行排序。

在 java 中实现 Comparable 的对象可以用作 SortedMap(如 TreeMap)或 SortedSet(如 TreeSet)中的键,而无需实现任何其他接口(interface)。

Comparator接口(interface):需要排序的对象的类不需要实现这个接口(interface)。一些第三方可以实现这个接口(interface)来排序。例如StateSortByIdComparator类可以实现Comparator接口(interface)来对状态对象的集合进行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 ;
    }

 }

关于java - comparator 和 comparable 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22692777/

相关文章:

java - 我如何更改机器生成的代码

java - 使用 hibernate 初始化实体时设置实体中的属性

java - 为什么它会跳过 While 循环内的 If 语句?它打印出 "no work",为什么?

java - 使用 Java 编写不同字符编码的 XML

JavaSonics ListenUp 的 Javascript 替代品

java - 字符串格式无法正确显示在 Android Studio 的 ListView 中

java - 使用 setDistinct() 的 Ebean 查询不起作用

java - 使用模拟服务/组件进行 Spring Boot 集成测试

java - java中从字符串中获取元素的快速方法

java - 如何在 JSP 中使用嵌套的 foreach 标签