下面两篇代码是分别用两个接口来实现了同样的目的
两个接口有什么不同吗?为什么要分为两种接口?//代码实现目的:
在TreeSet中加入对象元素,并对其中元素进行排序,假如出现学号相同则按名字字母的先后排序。import java.util.Iterator;
import java.util.TreeSet;
class TreeSetTest
{
public static void main(String[] args)
{
TreeSet<Object> ts=new TreeSet<Object>();

ts.add(new MyStudents(2,"Vida"));
ts.add(new MyStudents(4,"Lillian"));
ts.add(new MyStudents(2,"Lightmoon"));
ts.add(new MyStudents(1,"Chaner"));

Iterator it=ts.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}

}

}class MyStudents implements Comparable<Object>
{
int number;
String name;
MyStudents(int number,String name)
{
this.number=number;
this.name=name;
}
public String toString()
{
return "The Student's information is: Number="+number+" name="+name;
}
public int compareTo(Object o)
{
MyStudents mst=(MyStudents)o;
int result;
result=number > mst.number ? 1 : (number==mst.number ? 0 : -1);
if(result==0)
{
return result=name.compareTo(mst.name);
}
return result;
}

}
--------------------------------------------------------------------------import java.util.*;
class TreeSetTest
{
public static void main(String[] args)
{
TreeSet<Object> ts=new TreeSet<Object>(new MyStudents.MyStudentsComparator());

ts.add(new MyStudents(2,"Vida"));
ts.add(new MyStudents(4,"Lillian"));
ts.add(new MyStudents(2,"Lightmoon"));
ts.add(new MyStudents(1,"Chaner"));

Iterator it=ts.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}

}

}class MyStudents
{
int number;
String name;
MyStudents(int number,String name)
{
this.number=number;
this.name=name;
}
public String toString()
{
return "The Student's information is: Number="+number+" name="+name;
} static class MyStudentsComparator implements Comparator<Object>
{
public int compare(Object o1,Object o2)
{
MyStudents mst1=(MyStudents)o1;
MyStudents mst2=(MyStudents)o2;
int result=mst1.number>mst2.number?1:(mst1.number==mst2.number?0:-1);
if(result==0)
{
return mst1.name.compareTo(mst2.name);
}
return result;
}

}

}

解决方案 »

  1.   

    一个是lang包下面的接口,一个是util包下面的接口,看起来两个是实现相同的目的,但两者还是有区别的,
    1.Comparable<T>只有一个要实现的方法叫CompareTo
    而Comparator<T>取有两个方法.一个是Compare和equals
    2Comparable是一个参数的.而且他是系统调用的方法.所以他只能表示传入对象与当前对象的比较
    而Comparator是两个参数的,虽然也是系统调用的方法,不过他的比较就可以不是当前对象于传入对象的比较了,范围就大多了.