黑马程序员技术交流社区

标题: TreeSet程序中的一个疑惑 [打印本页]

作者: 张豪杰    时间: 2013-2-25 00:24
标题: TreeSet程序中的一个疑惑
本帖最后由 张豪杰 于 2013-2-25 11:45 编辑

import java.util.*;
class TreeSetDemo
{
        public static void main(String[] args)
        {
                TreeSet ts = new TreeSet();
                ts.add(new Student("lisi01",22));
                ts.add(new Student("lisi02",20));
                ts.add(new Student("lisi09",19));
                ts.add(new Student("lisi08",19));
                Iterator it = ts.iterator();
                while(it.hasNext())
                {
                        Student stu = (Student)it.next();
                        System.out.println(stu.getName()+"...."+stu.getAge());
                }
        }
}
class Student implements Comparable //该接口签字让学生对象具备较性。
{
        private String name;
        private int age;
        Student(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        public int compareTo(Object obj)
        {
                if(!(obj instanceof Student))
                        throw new RuntimeException("不是学生对象");
                Student s =(Student)obj;
               
                System.out.println(this.name+"....compareto...."+s.name);
                if (this.age>s.age)
                        return 1;
                if(this.age == s.age)
                {
                        return this.name.compareTo(s.name);
                }
                return -1;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
        
}
------------------------------
lisi01....compareto....lisi01
lisi02....compareto....lisi01
lisi09....compareto....lisi01
lisi09....compareto....lisi02
lisi08....compareto....lisi02
lisi08....compareto....lisi09
lisi08....19
lisi09....19
lisi02....20
lisi01....22
怎么存入的第一个对象会自己和自己比较啊?

作者: 彭颖    时间: 2013-2-25 01:47
TreeSet能保持有序,但是排序是你必须指出对象如何排序的。所以你自己看看你的compareTo就知道啦....
作者: 黄玉昆    时间: 2013-2-25 08:11
毕老师提过一句,当第一个元素存入的时候,会将自己带进这个compareTo中,打个比方说,一个人带另一个人进屋,只不过这个另一个人是他本人;lisi01将自身带入到compareTo中进行比较的。还可以这么理解,是我个人理解:当你存入第一个元素lisi01的时候,要现在堆内存中初始化,而集合也是需要初始化的,你做add这个动作的时候,它是知道这是第一个存入的,就会预存这个值,这时候就已经在集合中有了一个地址值,然后,当你存入这个集合中的时候,就会和这个值(即自身)比较,所以会出现这种情况




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2