Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “这是什么意思?”;Comparable影响原始类,但Comparator不影响“Comparable”; //原始类狗 班犬{ 字符串名; 智力年龄; } //案例1 类狗实现可比性{ //compareTo()实现 } //案例2 类狗实现比较器{ //compare()实现 } //案例3 类DogNameComparator实现Comparator{ //compare()实现 } 收集.排序(狗名单); sort(dogList,newdognamecomparator()); Collection.sort(dogList,newdog());_Java_Collections_Comparator_Comparable - Fatal编程技术网

Java “这是什么意思?”;Comparable影响原始类,但Comparator不影响“Comparable”; //原始类狗 班犬{ 字符串名; 智力年龄; } //案例1 类狗实现可比性{ //compareTo()实现 } //案例2 类狗实现比较器{ //compare()实现 } //案例3 类DogNameComparator实现Comparator{ //compare()实现 } 收集.排序(狗名单); sort(dogList,newdognamecomparator()); Collection.sort(dogList,newdog());

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

在案例2中,原始类实际上被修改了,即使他们说Comparator没有修改原始类,这难道不是真的吗?

可能是如果我没有正确理解这个概念,请给我一些启发。

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());