黑马程序员技术交流社区
标题:
关于HashSet集合排序重写的问题..
[打印本页]
作者:
折纸时代
时间:
2013-1-26 14:41
标题:
关于HashSet集合排序重写的问题..
本帖最后由 司懿卓 于 2013-1-26 15:12 编辑
先上代码:
/*
需求: 根据集合元素内容来对元素进行排序
思路...
*/
import java.util.*;
class Person
{
private String name;
private int age;
Person(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName() //getName
{
return this.name;
}
public int getAge() //getAge
{
return this.age;
}
public boolean equals(Object obj) //重写equals
{
if (this == obj)
return true;
if (obj != null && obj instanceof Person) //比较对象内容
{
Person p1 = (Person)obj;
if (p1.name == this.name)
return true;
return false;
}
return false;
}
public int hashCode() //重写hashCode
{
return this.age;
}
}
public class HashSetDemo
{
public static void sop(Object obj) //打印输出
{
System.out.println(obj);
}
public static void main(String[] args)
{
HashSet hs = new HashSet();
hs.add(new Person("张三", 26));
hs.add(new Person("李四", 19));
hs.add(new Person("王五", 18));
hs.add(new Person("李四", 20));
for (Iterator it = hs.iterator(); it.hasNext(); ) //迭代器
{
Person p = (Person)it.next();
sop("姓名:" + p.getName() + " 年龄:" + p.getAge());
//sop(p.hashCode());
}
}
}
复制代码
很是郁闷.
其他的看似一切都正常啊, 为什么我重写了hashCode方法后,返回age作为首选排序的条件.
可结果令人大吃一斤... 对,是一斤..
上图!
未命名.jpg
(45.45 KB, 下载次数: 47)
下载附件
2013-1-26 14:41 上传
求解惑~~~!
------------------------------------------------------------------------
自己的问题,已经解决.
谢谢回复的朋友们..
作者:
黄锦成
时间:
2013-1-26 14:50
从你题目看就知道有问题了!HashSet是无序的,TreeSet才是有序的。建议去看毕老师的视频,好好回顾一下
作者:
王晓斌
时间:
2013-1-26 14:55
楼主,hashset中的元素是无序的,它的底层结构是哈希表,里面元素不可以重复,而保证元素唯一性的依据就是你所重写的两个方法~~~先判断哈希值,相同的话再看equals~~~~
要想对元素进行排序的话,可以把元素放入treeset集合中~~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2