黑马程序员技术交流社区
标题:
java TreeSet问题
[打印本页]
作者:
hzhzhen
时间:
2015-5-23 10:49
标题:
java TreeSet问题
在Student中实现Comparable接口并构造了实现Comparable接口的compareToStudent。下面是代码示例:
import java.util.*;
public class TreeSetTest {
public static void main(String[] args)
{
//TreeSet ts=new TreeSet();
TreeSet ts=new TreeSet(new Students.compareToStudent());
ts.add(new Students(2,"zhangshan"));
ts.add(new Students(3,"lishi"));
ts.add(new Students(1,"wangwu"));
Iterator it=ts.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
class Students implements Comparable
{
int num;
String name;
Students(int num,String name)
{
this.num=num;
this.name=name;
}
//定义一个内部类来实现比较器
static class compareToStudent implements Comparator
{
public int compare(Object o1, Object o2) {
Students s1=(Students)o1;
Students s2=(Students)o2;
int rulst= s1.num > s2.num ? 1 : (s1.num==s2.num ? 0 :-1);
if(rulst==0)
{
rulst=s1.name.compareTo(s2.name);
}
return rulst;
}
}
//写具体的比较方法
public int compareTo(Object o)
{
int result;
Students s=(Students)o;
result=num >s.num ? 1:(num==s.num ? 0 : -1);
if(result==0)
{
result=name.compareTo(s.name);
}
return result;
}
public String toString()
{
return num+":"+name;
}
}
复制代码
我就想知道
static class compareToStudent implements Comparator {....... }
和 public int compareTo(Object o) {.....}的区别是什么,感觉代码都差不多呗???
作者:
mmakun
时间:
2015-5-23 13:14
一个是类,一个是匿名类,就这么点区别
作者:
wangkai
时间:
2015-5-23 16:40
有比较器以比较器为准,没有比较器,用compareTo比较。
作者:
guojiadui
时间:
2015-5-23 17:20
一个在对象上现实排序、一个在集合中现实排序,看具体需要用吧
作者:
l598790586
时间:
2015-5-23 23:08
public int compareTo(Object o) {.....}是实现接口Comparable后复写compareTo方法static class compareToStudent implements Comparator {....... }是定义一个类实现Comparator接口,复写compare方法,
Comparator 和 Comparable 相同的地方:
他们都是java的一个接口, 并且是用来对自定义的class比较大小的
两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,
但是需要修改源代码, 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义
的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自
己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2