对不起 看错了,刚睡醒,,这个其实是Comparator和Comparable的区别,Comparator叫做比较器,Comparable是让类具有比较性,,你必须先得让这个类实现comparable接口,如果对Comparable的方法中实现的类的比较不满意的话,然后可以自定义比较器也就是说 实现Comparator接口,你这里定义的A应该可以看做是比较器,要是你这样写的话,A还要实现Comparable接口
调试欢乐多
如果你用Comparator的话需要
TreeSet<A> list = new TreeSet<A>(new Comparator<T>() {
});
给TreeSet重新指定一个Comparator,因为TreeSet默认就是排序的所以需要这样指定,ArrayList等无序的使用强制排序时可以使用Collections.sort(list,new Comparator<T>(){
});
用comparable里面的compareTo方法,我只会数字比较,字符串该怎么在compareTo方法里写呀?
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>,Comparable<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;
}
}
public int compareTo(A other) //这个方法的主体该怎么写呀?
{
}
private String name;
private int number;
}
{
public static void main(String[] args)
{
SortedSet<A> list = new TreeSet<A>();
list.add(new A("www",100));
list.add(new A("efg", 88));
list.add(new A("de", 89));
System.out.println(list);
}
}class A implements Comparable<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 compareTo(A other)
{
int i;
i = name.compareTo(other.name); //此处的compareTo与方法名一样,是一回事吗?
if(i > 0)
{
return 1;
}
else if(i == 0)
{
return 0;
}
else
{
return -1;
}
} private String name;
private int number;
}
import java.util.*;public class Test_2
{
public static void main(String[] args)
{
SortedSet<A> list = new TreeSet<A>(new Acomparator());
list.add(new A("abc",100));
list.add(new A("efg", 88));
list.add(new A("de", 89));
System.out.println(list);
}
}class 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 + "]";
}
private String name;
private int number;
}
class Acomparator implements Comparator<A>
{
public int compare(A one, A two)
{
int i;
i = one.getName().compareTo(two.getName());
if(i > 0)
{
return 1;
}
else if(i == 0)
{
return 0;
}
else
{
return -1;
}
}
}