Comparable和 Comparator

76 阅读1分钟

Comparable 接口:

  • 位置: java.lang.Comparable 接口位于 java.lang 包中。

  • 实现方式: 对象自身实现 Comparable 接口,重写 compareTo 方法。

  • 用途: 提供对象的自然排序(默认排序方式)。

  • 排序规则: 对于类 A 实现了 Comparable 接口,若对象 a1a2A 的实例,则 a1.compareTo(a2) 返回负数表示 a1 小于 a2,返回正数表示 a1 大于 a2,返回 0 表示相等。

  • 示例:

    public class MyClass implements Comparable<MyClass> {
        private int value;
        
        public MyClass(int value) {
            this.value = value;
        }
        
        @Override
        public int compareTo(MyClass other) {
            return Integer.compare(this.value, other.value);
        }
    }
    

Comparator 接口:

  • 位置: java.util.Comparator 接口位于 java.util 包中。

  • 实现方式: 创建一个实现 Comparator 接口的独立类或使用匿名内部类。

  • 用途: 提供外部定制排序,可以对不同对象使用不同的排序规则。

  • 排序规则: 对于类 A,若创建了一个 Comparator<A> 对象 comp,则 comp.compare(a1, a2) 返回负数表示 a1 小于 a2,返回正数表示 a1 大于 a2,返回 0 表示相等。

  • 示例:

    public class MyComparator implements Comparator<MyClass> {
        @Override
        public int compare(MyClass obj1, MyClass obj2) {
            // 自定义比较规则
            return Integer.compare(obj1.getValue(), obj2.getValue());
        }
    }
    

如何选择使用:

  • 使用 Comparable 当你想为对象提供默认的自然排序。
  • 使用 Comparator 当你需要为同一对象提供多个不同的排序方式,或者当你无法修改类本身但仍需要进行排序时。