黑马程序员技术交流社区
标题:
在TreeSet中的compareTo方法中的一个问题
[打印本页]
作者:
逝去的记忆ヽ
时间:
2012-6-17 18:13
标题:
在TreeSet中的compareTo方法中的一个问题
本帖最后由 逝去的记忆ヽ 于 2012-6-17 20:03 编辑
部分代码和运行结果如下:
public int compareTo(Object obj)
{
if (!(obj instanceof Student))//比较接受的是不是学生类。
throw new RuntimeException("不是学生对象。");
Student s = (Student)obj;//进行强制转换 将接受的OBJ转化成student类
System.out.println(this.age+"--------"+s.age);//
在这里我输出的是在TreeSet添加元素时,年龄进行比较。
if (this.age>s.age)
return 1;
if(this.age == s.age)
{
return this.name.compareTo(s.name);//在比较字符串时,String类也继承了comparable这个接口。
}
return -1;
}
}
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet();
ts.add(new Student("zhangsan",3));
ts.add(new Student("lisi",30));
ts.add(new Student("wangwu",27));
ts.add(new Student("zhaosi",25));
for(Iterator it = ts.iterator(); it.hasNext(); )
{
Student s = (Student)it.next();
System.out.println(s.getName()+"--------"+s.getAge());
}
}
运行结果是:
30--------3
27--------3
27--------30
25--------27
25--------3//
那么在这里当年龄25进来的时候应该是和里面有的所有元素进行比较的吧?可是这里就和3进行了比较,30和,27都没有进行比较。这是为什么?我换了好几个数字都不行。求大神指教。
zhangsan-------3
zhaosi--------25
wangwu--------27
lisi--------30
作者:
车风波
时间:
2012-6-17 18:23
本帖最后由 车风波 于 2012-6-17 18:25 编辑
你看错了
25--------27
25--------3 25和 27、3都比较了 。
在25出现前 set里有30 27 3 当25进入后,它先取中间数27 因为27>25 所以就25不用再和30比了吧。然后再和3比,就排除顺序了。
作者:
朝哥
时间:
2012-6-17 19:24
二叉树结构就是,假设第一进来的是A
你进来的时候比A大,那你就不跟比A小的同学比了。
你进来的时候比A小,那你就不跟比A大的同学比了。
作者:
杨朔
时间:
2012-6-17 20:25
TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序。在比较之前,先跟第一个比较大小,如果它小于第一个数,因为treeSet有自身排序,它就不再跟比它小的数比较。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2