我对编程有些概念实在是部清楚了,恳请大神解答下。
我自定义一个类,那么要使用settree就要重写compareto()这个方法才行,就像下面这样
public int compareTo(Emp o) {
if(o == null){
throw new NullPointerException("参数不能为空");
}
if(this.age<o.age){
return -1;
}else if(this.age>o.age){
return 1;
}
return 0;
}
个人理解他会A.compareto(B)这样调用, 但是我设置断点查看变量时,为什么this指代的和我O输入的是同一个变量,然后就return 0,跳出运行,设置断点后程序不能运行处结果,不设置能正常排序。求解答
------解决方案--------------------
import java.util.*;
class Person implements Comparable{ //实现了comparable接口,必须重写compareTo方法!!!
private String name;
private int age;
private float score;
public Person(String name,int age,float score){
this.name=name;
this.age=age;
this.score=score;
}
public String toString(){
return "姓名:"+this.name+", 年龄:"+this.age+", 成绩:"+this.score;
}
public int compareTo(Object obj){ //compareTo方法是实现
Person p = (Person)obj;
if(p.score>this.score){
return 1;
}
else if(p.score<this.score){
return -1;
}
else{
if(p.age>this.age){
return 1;
}
else if(p.age<this.age){
return -1;
}
else{
return 0;
}
}
} //compareTo方法结束
} //类结束
public class OOCompareTo{
public static void main(String []args){
Person p[] = new Person[5];
p[0] = new Person("张三 ",23,96);
p[1] = new Person("张三2",24,96);
p[2] = new Person("张三3",21,94);
p[3] = new Person("张三4",22,98);
p[4] = new Person("张三5",20,89);
Arrays.sort(p); //对数组p内的元素进行了遍历操作(排序) 默认的方法是compareTo