覆盖compareTo()方法时,为什么要使用Comparable接口中的compareTo()?

LED幻影

我一直在四处搜寻,但最接近的回应(不是答案)在这里,但我对回应感到困惑。我正在尝试使用Collection.sort()对一些狗名进行排序,因此我需要学习使用Comparable接口。我的问题:

1)当我“覆盖” compareTo()时,为什么需要使用来自接口的compareTo()?
2)如果Comparable接口中的compareTo()是默认方法,为什么在该方法前面没有“ default”关键字?Java SE 8菜单

这是部分代码:

Collections.sort(list);   
for(Dog a: list)   // printing the sorted list of names
     System.out.print(a.getDogName() + ", ");

这是实现Comparable接口的类:

class Dog implements Comparator<Dog>, Comparable<Dog> {
   private String name;
   private int age;

   Dog() {}

   Dog(String n, int a) {
      name = n;  age = a;
   }

   public String getDogName() {
      return name;
   }

   public int getDogAge() {
      return age;
   }

   public int compareTo(Dog d) {
      return (this.name).compareTo(d.name);  //###.....my question
   }

   // Override Comparator Interface's compare() to sort "ages"
   public int compare(Dog d, Dog d1) {
      return d.age - d1.age;
   }
}
板球运动员

这是要考虑的事情。

一个DogComparable给其他Dog的。它本身不是将其他 两个进行比较的东西Dog

因此,实施Comparable是“更正确的”。

而且您在冲突两种方法。

static <T extends Comparable<? super T>> void sort(List<T> list)

根据其元素的自然顺序,将指定列表按升序排序。

因此,Collections.sort(dogs);将对您的列表进行排序。

static <T> void sort(List<T> list, Comparator<? super T> c)

根据由指定比较器引起的顺序对指定列表进行排序。

这就是您使用该方法的方式。

Collections.sort(dogs, new Comparator<Dog>() {
    @Override
    public int compare(Dog d1, Dog d2) {
        return d1.compareTo(d2); // Call the Comparable method
    }
)};

当然,您可以实现该内部方法以按年龄排序

return Integer.compare(d1.getAge(), d2.getAge());

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在接口可比的compareTo覆盖()问题

在Java中11的CharSequence接口添加方法`compare`。为什么不`可比接口compareTo`?

我为什么不能使用.compareTo(AA比较节点的BST为0键时)?

添加可比较的接口并添加compareTo()方法

为什么compareTo返回整数

当只有一个实现类时,为什么要使用一个接口?

为什么要覆盖父接口中的现有方法?

Java Integer compareTo()-为什么要使用比较与减法?

为什么compareTo使用比较器在用户分开时不执行NPE引发NPE

使用compareTo实现equals方法

为什么要使用接口,多重继承与接口,接口的优点?

使用对象的float属性的compareTo()方法。如何使用,为什么?

Collection类的sort()方法如何调用Comparable的compareTo()?

用嵌套在另一个扩展Comparable的类中的类覆盖compareTo方法

Comparable和运算符compareTo有什么区别?

未为Comparable类型定义compareTo(Comparable)方法

扩展可比较的接口并覆盖compareTo

在Comparable中覆盖compareTo以进行排序

Comparator和Comparable的compare和compareTo方法的协定

在ArrayList中使用的Comparable接口中==的工作

当您可以在类中定义compareTo方法时,为什么要实现Comparable接口?

为什么在可比较的实现中的CompareTo中使用`this`?

Comparable <T>和compareTo

为什么不能覆盖接口的方法?

我是否还需要使用 compareTo 方法覆盖 hashCode 和 equals 方法?

如何覆盖 compareTo Double 方法?

为什么要使用覆盖?

为什么 compareTo 不使用日期返回结果

为什么在接口中使用端口?