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

这个comparator在这个程序中为什么错了?
import java.util.*;

public class Test
{
public static void main(String[] args)
{
SortedSet<A> list = new TreeSet<A>();
list.add(new A("abc",100));
list.add(new A("efg", 88));
list.add(new A("de", 89));
System.out.println(list);

}
}

class A implements Comparator<A>
{
public A(String name, int number)
{
this.name = name;
this.number = number;
}

public String getName()
{
return name;
}

public int getNumber()
{
return number;
}

public String toString()
{
return "[name=" + name + ", number=" + number + "]";
}

public int compare(A a, A b)
{
if((a.name).compareTo(b.name)>0)
{
return 1;
}
else if((a.name).compareTo(b.name) ==0)
{
return 0;
}
else
{
return -1;
}
}
private String name;
private int number;
}

错误提示为



------解决方案--------------------
对不起  看错了,刚睡醒,,这个其实是Comparator和Comparable的区别,Comparator叫做比较器,Comparable是让类具有比较性,,你必须先得让这个类实现comparable接口,如果对Comparable的方法中实现的类的比较不满意的话,然后可以自定义比较器也就是说 实现Comparator接口,你这里定义的A应该可以看做是比较器,要是你这样写的话,A还要实现Comparable接口
------解决方案--------------------
你如果要通过类实现接口的方式进行排序的话需要实现的是 Comparable接口并且重写public int compareTo(A a)方法,
如果你用Comparator的话需要
TreeSet<A> list = new TreeSet<A>(new Comparator<T>() {
});
给TreeSet重新指定一个Comparator,因为TreeSet默认就是排序的所以需要这样指定,ArrayList等无序的使用强制排序时可以使用Collections.sort(list,new Comparator<T>(){
});