A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 騛鹏 中级黑马   /  2013-3-19 21:01  /  1258 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 騛鹏 于 2013-3-20 11:02 编辑
  1. import java.util.*;

  2. class  TreeSetDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 TreeSet ts = new TreeSet();

  7.                 ts.add(new Student("lisi02",22));
  8.                 ts.add(new Student("lisi07",20));
  9.                 ts.add(new Student("lisi09",19));
  10.                 ts.add(new Student("lisi08",23));

  11.                 Iterator it = ts.iterator();

  12.                 while (it.hasNext())
  13.                 {
  14.                         Student stu = (Student)it.next();

  15.                         System.out.println(stu.getName()+"...."+stu.getAge());
  16.                 }
  17.         }
  18. }
  19. class Student implements Comparable
  20. {
  21.         private String name;
  22.         private int age;

  23.         Student(String name,int age)
  24.         {
  25.                 this.name = name;
  26.                 this.age = age;
  27.         }

  28.         public int compareTo(Object obj)
  29.         {
  30.                 if(!(obj instanceof Student))
  31.                         throw new RuntimeException("No Student");

  32.                 Student s = (Student)obj;
  33.                 System.out.println(this.name+".....compareto....."+s.name);

  34.                 if(this.age == s.age)
  35.                         return this.name.compareTo(s.name);
  36.                 if(this.age > s.age)
  37.                         return -1;
  38.                 return 1;

  39.         }

  40.         public String getName()
  41.         {
  42.                 return name;
  43.         }

  44.         public int getAge()
  45.         {
  46.                 return age;
  47.         }
  48. }
复制代码


为何 Lisi 08没有与 Lisi 09比较呢

评分

参与人数 1技术分 +2 收起 理由
猫腻 + 2

查看全部评分

5 个回复

倒序浏览
因为你这个是按照年龄的大小排序的(从大到小)当lisi08与lisi02比完后return -1;就已经在必出了结果,没有必要再继续向下比了;

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
底层是二叉树型的数据结构,按照年龄比较方式如图,以第一个元素作为根节点,再次添加元素的时候,如果值比根节点大,就添加为右孩子,否则添加为左孩子,同理以此类推即可,得到一个存入元素的树结构;元素取出时是把每个节点按照左中右的顺序取出来的,所以在第一个元素的两边的元素是不用进行比较的。

无标题.png (15.38 KB, 下载次数: 9)

无标题.png

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
小路飞 来自手机 中级黑马 2013-3-20 01:02:24
板凳
TreeSet底层数据结构是二叉树,结合老师讲的二叉树原理以及你所选择的按照age排序就很容易得出结论了。参见day15天视频教程!
回复 使用道具 举报
樱木花道10 发表于 2013-3-20 00:26
底层是二叉树型的数据结构,按照年龄比较方式如图,以第一个元素作为根节点,再次添加元素的时候,如果值比 ...



是否ts.add(new Student("lisi09",19)); 后,lisi07 转为根节点 ?因为只有这样才可解释
回复 使用道具 举报
騛鹏 发表于 2013-3-20 09:49
是否ts.add(new Student("lisi09",19)); 后,lisi07 转为根节点 ?因为只有这样才可解释 ...

是的,是我没有解释清楚。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马