说" Comparable会影响原来的课程,但是比较者没有"

时间:2017-07-22 03:28:25

标签: java collections comparator comparable

// 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没有修改原始类,实际修改了原始类,这是不是真的?
如果我没有正确理解这个概念,可以启发我。

1 个答案:

答案 0 :(得分:2)

Comparable只能在原始类上实现,因此只能有一个实现(除非使用子类覆盖compareTo)。同时,Comparator不需要在原始类上实现,因此可以有许多实现。

您的第二种情况与第一种情况完全不同,因为compare可以访问三个Dog实例(this,参数#1和参数#2),而compareTo只能访问两个Dog个实例(this和参数#1)。