黑马程序员技术交流社区
标题:
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