日期:2014-05-20  浏览次数:20720 次

代码中是怎么调用compareTo方法的
						
import java.util.Set;
import java.util.TreeSet;
class Person implements Comparable<Person>{
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String toString(){
return "姓名:"+this.name+" 年龄:"+this.age;
}
public int compareTo(Person per){
if(this.age>per.age){
return 1;
}else if(this.age==per.age){
return 0;
}else{
return -1;
}
}
}
public class SetDemo03{
public static void main(String args[]){
Set<Person> allSet=new TreeSet<Person>();
allSet.add(new Person("张三",22));
allSet.add(new Person("李四",23));
allSet.add(new Person("王五",21));
allSet.add(new Person("王五",21));
allSet.add(new Person("王五",21));
allSet.add(new Person("赵六",32));
allSet.add(new Person("孙七",11));
System.out.println(allSet);
}
}


就是这段代码他实现了Comparable接口,也就覆写了compareTo()方法,但是在这个程序中没有看对象调用compareTo()方法,可以告诉我comapreTo()方法是怎么被调用的吗?

------解决方案--------------------
这种东西楼主看TreeSet的源码就知道了....
TreeSet的底层实现其实是TreeMap在每次add的时候也就是调用TreeMap的put方法这时如果有外部比较器Comparator的实现就会调用外部的Comparator的比较方法,如果没有就会调用实现Comparable接口的类的compareTo方法
------解决方案--------------------
引用:
这种东西楼主看TreeSet的源码就知道了....
TreeSet的底层实现其实是TreeMap在每次add的时候也就是调用TreeMap的put方法这时如果有外部比较器Comparator的实现就会调用外部的Comparator的比较方法,如果没有就会调用实现Comparable接口的类的compareTo方法

就是一楼说的这个,Set不允许有重复的元素,所以使用add()方法是,在方法内部会调用对象的compareTo方法以判断两个对象是否相等
------解决方案--------------------
你在 comparato内部加一个打印语句,,就能看出来调用了。。  这事内部调用。。要想弄清楚 。。。看源码。。
------解决方案--------------------
排序的时候在比较两个对象时用compareTo方法.

import java.util.Arrays;

class AlohaPerson implements Comparable<AlohaPerson> {
    private String name;

    AlohaPerson(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }

    @Override
    public int compareTo(AlohaPerson o) {
        return this.name.compareTo(o.name);
    }
}

public class Aloha {
    public static void sort(AlohaPerson[] persons) {
        // 用选择排序法排序
        for (int i = 0; i < persons.length - 1; ++i) {
            int k = i;

            for (int j = k; j < persons.length; ++j) {
                // 排序的时候在比较两个对象时用compareTo方法.
                if (persons[j].compareTo(persons[k]) < 0) {
                    k = j;
                }
            }

            if (k != i) {
                AlohaPerson temp = persons[k];
                persons[k] = persons[i];