我一直在四处搜寻,但最接近的回应(不是答案)在这里,但我对回应感到困惑。我正在尝试使用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;
}
}
这是要考虑的事情。
一个Dog
是Comparable
给其他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] 删除。
我来说两句