Java “这是什么意思?”;Comparable影响原始类,但Comparator不影响“Comparable”; //原始类狗 班犬{ 字符串名; 智力年龄; } //案例1 类狗实现可比性{ //compareTo()实现 } //案例2 类狗实现比较器{ //compare()实现 } //案例3 类DogNameComparator实现Comparator{ //compare()实现 } 收集.排序(狗名单); sort(dogList,newdognamecomparator()); Collection.sort(dogList,newdog());
在案例2中,原始类实际上被修改了,即使他们说Comparator没有修改原始类,这难道不是真的吗?Java “这是什么意思?”;Comparable影响原始类,但Comparator不影响“Comparable”; //原始类狗 班犬{ 字符串名; 智力年龄; } //案例1 类狗实现可比性{ //compareTo()实现 } //案例2 类狗实现比较器{ //compare()实现 } //案例3 类DogNameComparator实现Comparator{ //compare()实现 } 收集.排序(狗名单); sort(dogList,newdognamecomparator()); Collection.sort(dogList,newdog());,java,collections,comparator,comparable,Java,Collections,Comparator,Comparable,在案例2中,原始类实际上被修改了,即使他们说Comparator没有修改原始类,这难道不是真的吗? 可能是如果我没有正确理解这个概念,请给我一些启发。Comparable只能在原始类上实现,因此它只能有一个实现(除非使用子类重写compareTo)。同时,Comparator不需要在原始类上实现,因此可以有许多实现 第二种情况与第一种情况大不相同,因为compare可以访问三个Dog实例(this、parameter#1和parameter#2),而compare只能访问两个Dog实例(this
可能是如果我没有正确理解这个概念,请给我一些启发。
Comparable
只能在原始类上实现,因此它只能有一个实现(除非使用子类重写compareTo
)。同时,Comparator
不需要在原始类上实现,因此可以有许多实现
第二种情况与第一种情况大不相同,因为
compare
可以访问三个Dog
实例(this
、parameter#1和parameter#2),而compare
只能访问两个Dog
实例(this
和parameter#1)。您的示例有缺陷(或不完整),第二个示例不要求提供比较器本身(事实上,这使得差异很难看出)。但是请注意,第三个示例独立于Dog
。谢谢!!!…但是,这行“比较器不影响原始类”这让我很困扰,因为即使案例2不是它的实现方式,它仍然是一个允许的实现权利,它迫使Dog类实现compare(),所以Dog类实际上受到Comparator的影响,对吗?@ShyamSreenivasan,对,您实现它的方式,案例2显示Dog
受到Comparator
的影响,但实际上一个类从来没有被用作它自己的Comparator
,因为很容易混淆我提到的3个实例,还有一个Comparator
的主要用途之一是,您不需要原始类的实例就可以比较2个实例。Alight!这很酷。但我只是想知道为什么Java一开始就允许我们这么做。谢谢!
// 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());