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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙百鑫 高级黑马   /  2013-4-23 01:03  /  1460 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-4-23 23:27 编辑
  1. /*

  2. */
  3. import java.util.*;
  4. class TreeSetDemo
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 TreeSet ts=new TreeSet();//定义Tree集合.该集合自动排序

  9.                 ts.add(new Student("lise01",21));
  10.                 ts.add(new Student("lise02",23));
  11.                 ts.add(new Student("lise03",25));
  12.                 ts.add(new Student("lise04",24));
  13.                 ts.add(new Student("lise05",28));

  14.                 sop(ts.size());//打印长度                  ps:为什么打印出来的长度是1???????

  15.                 Iterator it=ts.iterator();//使用迭代器.取出元素
  16.                 while(it.hasNext())
  17.                 {
  18.                         Student stu=(Student)it.next();//将元素装换成学生然后打印
  19.                         sop(stu.getName()+"......."+stu.getAge());//                                          ps为什么只打印出来一个???
  20.                 }
  21.         }
  22.         public static void sop(Object obj)
  23.         {
  24.                 System.out.println(obj);
  25.         }
  26. }
  27. class Student implements Comparable//学生类.因为本身不具备比较性.要实现C哦买怕热接口覆盖方法才可以比较
  28. {
  29.         private String name;
  30.         private int age;
  31.         public int compareTo(Object obj)//覆盖的CompaerTo方法.按照年龄比较
  32.         {
  33.                 if(!(obj instanceof Student))//用instanceof判断一下是不是学生对象不不是抛异常
  34.                         throw new RuntimeException("不是学生对象");
  35.                 Student stu=(Student)obj;
  36.                 if(this.age>age)
  37.                         return 1;
  38.                 if(this.age==age)
  39.                         return 0;
  40.                 return -1;

  41.         }
  42.         Student(String name,int age)
  43.         {
  44.                 this.name=name;
  45.                 this.age=age;
  46.         }
  47.         public String getName()
  48.         {
  49.                 return name;
  50.         }
  51.         public int getAge()
  52.         {
  53.                 return age;
  54.         }
  55. }
复制代码
我知道问题不大.可是找了半天就是找不到哪里的问题.ps的地方就是我要问的地方

评分

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

查看全部评分

3 个回复

倒序浏览
本帖最后由 沈浩 于 2013-4-23 01:19 编辑

因为你在进行年龄比较时  写的  this.age>age这不就是this.age>age吗  所以比较的结果 return 0;啦  所以集合里只存入一个对象
age前面加上所属对象
if(this.age>stu.age)

                        return 1;

                if(this.age==stu.age)

评分

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

查看全部评分

回复 使用道具 举报
正如楼上所述。。如果你用this.age  与age相比较的话,结果会返回0

导致比较器判断所有对象都相等,都是同一个人,所以最终只有一个学生对象被添加进来。

另外还有代码中if(this.age==stu.age)
                {
                        return this.name.compareTo(s.name);
                }
这样的话如果年龄相同,又会按照姓名排序,。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马