"Comparable affects the original class but Comparator doesnt" 是什么意思
What does it mean by saying "Comparable affects the original class but Comparator doesnt"
// Original class Dog
class Dog{
String name;
int age;
}
//Case 1
class Dog implements Comparable<Dog>{
//compareTo() implementation
}
//Case2
class Dog implements Comparator<Dog>{
// compare() implementation
}
//Case 3
class DogNameComparator implements Comparator<Dog>{
// compare() implementation
}
Collection.sort(dogList);
Collectios.sort(dogList,new DogNameComparator());
Collection.sort(dogList,new Dog());
在情况 2 中,即使他们说 Comparator 不修改原始 class,原始 class 实际上也被修改了,这不是真的吗?
可能是我没有理解正确的概念,请赐教。
Comparable
只能在原来的 class 上实现,因此它只能有一个实现(除非你使用 sub[=23 覆盖 compareTo
=]).同时,Comparator
不需要在原来的class上实现,所以可以有很多实现。
您的第二种情况与第一种情况完全不同,因为 compare
将可以访问三个 Dog
实例(this
、参数 #1 和参数 #2) ,而 compareTo
只能访问两个 Dog
实例(this
和参数 #1)。
// Original class Dog
class Dog{
String name;
int age;
}
//Case 1
class Dog implements Comparable<Dog>{
//compareTo() implementation
}
//Case2
class Dog implements Comparator<Dog>{
// compare() implementation
}
//Case 3
class DogNameComparator implements Comparator<Dog>{
// compare() implementation
}
Collection.sort(dogList);
Collectios.sort(dogList,new DogNameComparator());
Collection.sort(dogList,new Dog());
在情况 2 中,即使他们说 Comparator 不修改原始 class,原始 class 实际上也被修改了,这不是真的吗?
可能是我没有理解正确的概念,请赐教。
Comparable
只能在原来的 class 上实现,因此它只能有一个实现(除非你使用 sub[=23 覆盖 compareTo
=]).同时,Comparator
不需要在原来的class上实现,所以可以有很多实现。
您的第二种情况与第一种情况完全不同,因为 compare
将可以访问三个 Dog
实例(this
、参数 #1 和参数 #2) ,而 compareTo
只能访问两个 Dog
实例(this
和参数 #1)。