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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天在电脑上敲代码输出结果与视频不一致:我的输出结果是这样:
lisi01....compareTo....lisi01
lisi007....compareTo....lisi01
lisi09....compareTo....lisi01
lisi09....compareTo....lisi007
lisi99....compareTo....lisi007
lisi99....compareTo....lisi09
lisi19....compareTo....lisi007
lisi19....compareTo....lisi01
lisi39....compareTo....lisi007
lisi39....compareTo....lisi01
lisi39....compareTo....lisi19
lisi49....compareTo....lisi007
lisi49....compareTo....lisi19
lisi49....compareTo....lisi01
lisi09....19
lisi99....19
lisi007....20
lisi49....20
lisi01....22
lisi19....29
lisi39....39
毕老师讲课视频输出结果没有第一行,第一行是向TreeSet集合中存入第一个元素,按说应该没有第一行的比较,哪位能否解释下;另往里存最后一个元素new Student("lisi49",20)时,因与(“lisi007”....20)年龄相同,所以与(“lisi007”....20)比较名字,而后不就应该排在(“lisi007”....20)之后了么,为何还会有最后两行输出结果的比较?

我的源代码如下:
  1. package day15;
  2. import java.util.*;
  3. /*
  4. * 需求:往TreeSet集合中存储自定义对象学生
  5. * 按照学生的年龄进行排序
  6. */
  7. class TreeSetDemo
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 TreeSet ts=new TreeSet();
  12.                 ts.add(new Student("lisi01",22));
  13.                 ts.add(new Student("lisi007",20));
  14.                 ts.add(new Student("lisi09",19));
  15.                 ts.add(new Student("lisi99",19));
  16.                 ts.add(new Student("lisi19",29));
  17.                 ts.add(new Student("lisi39",39));
  18.                 ts.add(new Student("lisi49",20));
  19.                 Iterator it=ts.iterator();
  20.                 while(it.hasNext())
  21.                 {
  22.                         Student stu=(Student)it.next();
  23.                         System.out.println(stu.getName()+"...."+stu.getAge());
  24.                 }
  25.                
  26.         }

  27. }
  28. class Student implements Comparable
  29. {
  30.         private String name;
  31.         private int age;
  32.         Student(String name,int age)
  33.         {
  34.                 this.name=name;
  35.                 this.age=age;
  36.         }
  37.         public int compareTo(Object obj)
  38.         {
  39.                 if(!(obj instanceof Student))
  40.                         throw new RuntimeException("不是学生对象");
  41.                 Student s=(Student)obj;
  42.                 System.out.println(this.name+"....compareTo...."+s.name);
  43.                 if(this.age>s.age)
  44.                         return 1;
  45.                 if(this.age==s.age)
  46.                 {
  47.                         return this.name.compareTo(s.name);
  48.                 }
  49.                        
  50.                 return -1;
  51.         }
  52.         public String getName()
  53.         {
  54.                 return name;
  55.         }
  56.         public int getAge()
  57.         {
  58.                 return age;
  59.         }
  60. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

5 个回复

倒序浏览
  1. import java.util.*;

  2. /*
  3. Set:无序,不可以重复元素。
  4.         |--HashSet:数据结构是哈希表。线程是非同步的。
  5.                                 保证元素唯一性的原理:判断元素的hashCode值是否相同。
  6.                                 如果相同,还会继续判断元素的equals方法,是否为true。

  7.         |--TreeSet:可以对Set集合中的元素进行排序。
  8.                                 底层数据结构是二叉树。
  9.                                 保证元素唯一性的依据:
  10.                                 compareTo方法return 0.

  11.                                 TreeSet排序的第一种方式:让元素自身具备比较性。
  12.                                 元素需要实现Comparable接口,覆盖compareTo方法。
  13.                                 也种方式也成为元素的自然顺序,或者叫做默认顺序。

  14.                                 TreeSet的第二种排序方式。
  15.                                 当元素自身不具备比较性时,或者具备的比较性不是所需要的。
  16.                                 这时就需要让集合自身具备比较性。
  17.                                 在集合初始化时,就有了比较方式。








  18. 需求:
  19. 往TreeSet集合中存储自定义对象学生。
  20. 想按照学生的年龄进行排序。


  21. 记住,排序时,当主要条件相同时,一定判断一下次要条件。


  22. */

  23. class TreeSetDemo
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 TreeSet ts = new TreeSet();

  28.                 ts.add(new Student("lisi02",22));
  29.                 ts.add(new Student("lisi007",20));
  30.                 ts.add(new Student("lisi09",19));
  31.                 ts.add(new Student("lisi08",19));
  32.                 //ts.add(new Student("lisi007",20));
  33.                 //ts.add(new Student("lisi01",40));

  34.                 Iterator it = ts.iterator();
  35.                 while(it.hasNext())
  36.                 {
  37.                         Student stu = (Student)it.next();
  38.                         System.out.println(stu.getName()+"..."+stu.getAge());
  39.                 }
  40.         }
  41. }


  42. class Student implements Comparable//该接口强制让学生具备比较性。
  43. {
  44.         private String name;
  45.         private int age;

  46.         Student(String name,int age)
  47.         {
  48.                 this.name = name;
  49.                 this.age = age;
  50.         }

  51.         public int compareTo(Object obj)
  52.         {

  53.                 //return 0;
  54.                
  55.                 if(!(obj instanceof Student))
  56.                         throw new RuntimeException("不是学生对象");
  57.                 Student s = (Student)obj;

  58.                 System.out.println(this.name+"....compareto....."+s.name);
  59.                 if(this.age>s.age)
  60.                         return 1;
  61.                 if(this.age==s.age)
  62.                 {
  63.                         return this.name.compareTo(s.name);
  64.                 }
  65.                 return -1;
  66.                 /**/
  67.         }

  68.         public String getName()
  69.         {
  70.                 return name;

  71.         }
  72.         public int getAge()
  73.         {
  74.                 return age;
  75.         }
  76. }
复制代码
同学的结果和你一样,可能是新版本的问题我给出老师当时的代码 你对照以后 然后在自己的自己机子上运行看下结果!

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 刻苦专研,奖励楼主,好榜样

查看全部评分

回复 使用道具 举报
老毕搞这东西,想郁闷死人啊,我也看了毕老师的源代码,代码没差别,应该是版本问题
回复 使用道具 举报
Jim-剣◆﹏ 发表于 2013-10-21 19:49
老毕搞这东西,想郁闷死人啊,我也看了毕老师的源代码,代码没差别,应该是版本问题 ...

恩可能是吧,thankyou
回复 使用道具 举报
呵呵,我也遇到这个问题了 会多比较,估计就是新版本增加的吧
回复 使用道具 举报
寻丶丶觅 发表于 2013-10-22 10:09
呵呵,我也遇到这个问题了 会多比较,估计就是新版本增加的吧

:)恩可能是吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马