黑马程序员技术交流社区
标题:
关于集合的问题.
[打印本页]
作者:
孙百鑫
时间:
2013-4-23 01:03
标题:
关于集合的问题.
本帖最后由 孙百鑫 于 2013-4-23 23:27 编辑
/*
*/
import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet ts=new TreeSet();//定义Tree集合.该集合自动排序
ts.add(new Student("lise01",21));
ts.add(new Student("lise02",23));
ts.add(new Student("lise03",25));
ts.add(new Student("lise04",24));
ts.add(new Student("lise05",28));
sop(ts.size());//打印长度 ps:为什么打印出来的长度是1???????
Iterator it=ts.iterator();//使用迭代器.取出元素
while(it.hasNext())
{
Student stu=(Student)it.next();//将元素装换成学生然后打印
sop(stu.getName()+"......."+stu.getAge());// ps为什么只打印出来一个???
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class Student implements Comparable//学生类.因为本身不具备比较性.要实现C哦买怕热接口覆盖方法才可以比较
{
private String name;
private int age;
public int compareTo(Object obj)//覆盖的CompaerTo方法.按照年龄比较
{
if(!(obj instanceof Student))//用instanceof判断一下是不是学生对象不不是抛异常
throw new RuntimeException("不是学生对象");
Student stu=(Student)obj;
if(this.age>age)
return 1;
if(this.age==age)
return 0;
return -1;
}
Student(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
复制代码
我知道问题不大.可是找了半天就是找不到哪里的问题.ps的地方就是我要问的地方
作者:
沈浩
时间:
2013-4-23 01:17
本帖最后由 沈浩 于 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)
作者:
续圆凯
时间:
2013-4-23 02:03
正如楼上所述。。如果你用this.age 与age相比较的话,结果会返回0
导致比较器判断所有对象都相等,都是同一个人,所以最终只有一个学生对象被添加进来。
另外还有代码中if(this.age==stu.age)
{
return this.name.compareTo(s.name);
}
这样的话如果年龄相同,又会按照姓名排序,。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2