java中comapreTo方法中使用的排序类型,我只想知道compareTo方法是如何工作的? import java.util.*; 类狗实现比较器,可比较{ 私有字符串名称; 私人互联网; 狗(){ } 狗(字符串n,整数a){ name=n; 年龄=a; } 公共字符串getDogName(){ 返回名称; } public int getDogAge(){ 回归年龄; } //重写compareTo方法 公共内部比较(狗d){ return(this.name).compareTo(d.name); } //重写compare方法以对年龄进行排序 公共整数比较(狗d、狗d1){ 返回d.age-d1.age; } } 公开课范例{ 公共静态void main(字符串参数[]){ //获取狗对象的列表 列表=新的ArrayList(); 添加(新狗(“毛茸茸的”,3)); 添加(新狗(“花边”,2)); 添加(新狗(“罗杰”,10)); 添加(新狗(“汤米”,4)); 添加(新狗(“Tammy”,1)); Collections.sort(list);//对数组列表进行排序 for(Dog a:list)//打印已排序的名称列表 System.out.print(a.getDogName()+“,”); //使用比较器对数组列表排序 Collections.sort(list,newdog()); System.out.println(“”); for(Dog a:list)//打印已排序的年龄列表 System.out.print(a.getDogName()+“:”+ a、 GetDoAge()+“,”; } }

java中comapreTo方法中使用的排序类型,我只想知道compareTo方法是如何工作的? import java.util.*; 类狗实现比较器,可比较{ 私有字符串名称; 私人互联网; 狗(){ } 狗(字符串n,整数a){ name=n; 年龄=a; } 公共字符串getDogName(){ 返回名称; } public int getDogAge(){ 回归年龄; } //重写compareTo方法 公共内部比较(狗d){ return(this.name).compareTo(d.name); } //重写compare方法以对年龄进行排序 公共整数比较(狗d、狗d1){ 返回d.age-d1.age; } } 公开课范例{ 公共静态void main(字符串参数[]){ //获取狗对象的列表 列表=新的ArrayList(); 添加(新狗(“毛茸茸的”,3)); 添加(新狗(“花边”,2)); 添加(新狗(“罗杰”,10)); 添加(新狗(“汤米”,4)); 添加(新狗(“Tammy”,1)); Collections.sort(list);//对数组列表进行排序 for(Dog a:list)//打印已排序的名称列表 System.out.print(a.getDogName()+“,”); //使用比较器对数组列表排序 Collections.sort(list,newdog()); System.out.println(“”); for(Dog a:list)//打印已排序的年龄列表 System.out.print(a.getDogName()+“:”+ a、 GetDoAge()+“,”; } },collections,compare,Collections,Compare,您提供的示例演示了Comparable和Comparator接口的工作原理。当您为一个集合提供一个可比较的类型,然后对该集合的实例调用Collections.sort()时,将使用compareTo()来确定正确的顺序 现在,正如上面的示例所示,Collections.sort()还提供了一个覆盖,您可以通过传递Comparator的实例来提供替代比较。然后,该方法将忽略比较器实例的compareTo(),并使用比较器实例的compare()来确定正确的顺序 上面示例的结果将在第一次调用sort

您提供的示例演示了
Comparable
Comparator
接口的工作原理。当您为一个集合提供一个
可比较的
类型,然后对该集合的实例调用
Collections.sort()
时,将使用
compareTo()
来确定正确的顺序

现在,正如上面的示例所示,
Collections.sort()
还提供了一个覆盖,您可以通过传递
Comparator
的实例来提供替代比较。然后,该方法将忽略比较器实例的
compareTo()
,并使用比较器实例的
compare()
来确定正确的顺序

上面示例的结果将在第一次调用
sort()
时,使用
Comparable.compareTo()
方法根据狗的名称对狗实例进行排序,而在第二次调用
Comparator.compare()
将根据狗的年龄对狗实例进行排序

一个不相关的注意事项:在不同的类中实现
Comparator
可能更清楚,以避免这种类型的混淆。第二个排序调用可能更容易理解,如下所示:

import java.util.*;



class Dog implements Comparator<Dog>, Comparable<Dog>{
   private String name;
   private int age;
   Dog(){
   }

   Dog(String n, int a){
      name = n;
      age = a;
   }

   public String getDogName(){
      return name;
   }

   public int getDogAge(){
      return age;
   }

   // Overriding the compareTo method
   public int compareTo(Dog d){
      return (this.name).compareTo(d.name);
   }

   // Overriding the compare method to sort the age 
   public int compare(Dog d, Dog d1){
      return d.age - d1.age;
   }
}

public class Example{

   public static void main(String args[]){
      // Takes a list o Dog objects
      List<Dog> list = new ArrayList<Dog>();

      list.add(new Dog("Shaggy",3));
      list.add(new Dog("Lacy",2));
      list.add(new Dog("Roger",10));
      list.add(new Dog("Tommy",4));
      list.add(new Dog("Tammy",1));
      Collections.sort(list);// Sorts the array list

      for(Dog a: list)//printing the sorted list of names
         System.out.print(a.getDogName() + ", ");

      // Sorts the array list using comparator
      Collections.sort(list, new Dog());
      System.out.println(" ");
      for(Dog a: list)//printing the sorted list of ages
         System.out.print(a.getDogName() +"  : "+
         a.getDogAge() + ", ");
   }
}

compareTo
不排序:它比较两个对象。排序的类型取决于比较对象的方法。@jeffamaphone无法获取it@loannis在做了一些实验后会给你回复
Collections.sort(list, new DogComparator());