java - 说 "Comparable affects the original class but Comparator doesnt"是什么意思

标签 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 不修改原始类,原始类实际上也被修改了,这不是真的吗?
可能是我没有正确理解这个概念,请赐教。

最佳答案

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

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

关于java - 说 "Comparable affects the original class but Comparator doesnt"是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45250352/

相关文章:

java - 为什么在用非泛型方法覆盖泛型方法时,子签名和未经检查的规则在返回类型上以这种方式工作?

java - 使用 Quarkus Resteasy Reactive 记录实体主体

collections - C# 中的 IComparer<> 和类继承

java - 从哈希表中读取值显示了自然顺序的倒数

java - 如何在现有的 Tomcat 安装中嵌入 OpenEJB

java - 如何使用 JOOQ 正确构建动态 WHERE 子句条件?

c# - 如何优雅地解决这个考勤表问题?

java - 如何根据 "."对 arraylist 进行排序?

java - TreeSet<Entry<Character, Long> 使用比较器排序问题

java - Arrays.sort 使用 Lambda 然后比较