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