黑马程序员技术交流社区

标题: 对我来说很难的题 有兴趣的进吧 [打印本页]

作者: yanzhigang    时间: 2013-5-25 22:19
标题: 对我来说很难的题 有兴趣的进吧
HashSet存储自定义对象并遍历。 需求:我们假设同姓名同年龄的人即为同一个人。  Student(name,age) 需要自己实现。
作者: 王靖远    时间: 2013-5-25 22:25
自己复写hashCode和equals方法就行了。
public int hashCode()
        {
                System.out.println(this.name+"....hashCode");
                return name.hashCode()+age*19;//防止算出来的hashcode相同。影响效率
                //return 60;
        }
        public boolean equals(Object obj)
        {
                if(!(obj instanceof Person))
                        return false;
                Person p = (Person)obj;
                System.out.println(this.name+"..equals.."+p.name);
                return this.name.equals(p.name) && this.age == p.age;//这里是字符串的equals方法
作者: 画饼    时间: 2013-5-25 22:44
Comparable 接口 compareTo的方法,可以添加比较方法,你先比较下name 再比较Age,这样给出比较方法后,相等的存进去应该就会没了。
compareTo
int compareTo(T o)比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
实现类必须确保对于所有的 x 和 y 都存在 sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) 的关系。(这意味着如果 y.compareTo(x) 抛出一个异常,则 x.compareTo(y) 也要抛出一个异常。)

实现类还必须确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0。

最后,实现者必须确保 x.compareTo(y)==0 意味着对于所有的 z,都存在 sgn(x.compareTo(z)) == sgn(y.compareTo(z))。 强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但并不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”

在前面的描述中,符号 sgn(expression) 指定 signum 数学函数,该函数根据 expression 的值是负数、零还是正数,分别返回 -1、0 或 1 中的一个值。


参数:
o - 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。
可以自己看看API 。也可以944579708 找我聊,厄,应该不会错的,一会我也去试试
作者: 画饼    时间: 2013-5-25 22:47
画饼 发表于 2013-5-25 22:44
Comparable 接口 compareTo的方法,可以添加比较方法,你先比较下name 再比较Age,这样给出比较方法后,相 ...

新手浅见,要是错了给我指出,别喷哈
作者: 王靖远    时间: 2013-5-25 22:51
画饼 发表于 2013-5-25 22:47
新手浅见,要是错了给我指出,别喷哈

用Comparable或者Comparator,比较适合用于TreeSet集合。楼主问的是HashSet集合的方法。

作者: 画饼    时间: 2013-5-25 22:59
王靖远 发表于 2013-5-25 22:51
用Comparable或者Comparator,比较适合用于TreeSet集合。楼主问的是HashSet集合的方法。
...

请哥哥告知原因,菜鸟一枚不懂
作者: 王靖远    时间: 2013-5-25 23:07
画饼 发表于 2013-5-25 22:59
请哥哥告知原因,菜鸟一枚不懂

HashSet底层数据结构是哈希表,依赖于哈希值。就必须复写hashCode()和equals(),来保证唯一性。
作者: 画饼    时间: 2013-5-25 23:15
王靖远 发表于 2013-5-25 23:07
HashSet底层数据结构是哈希表,依赖于哈希值。就必须复写hashCode()和equals(),来保证唯一性。 ...

哥哥是哪一期的啊
作者: 王靖远    时间: 2013-5-25 23:24
画饼 发表于 2013-5-25 23:15
哥哥是哪一期的啊

准备进21期。现在家里还有点事。
作者: 画饼    时间: 2013-5-25 23:36
王靖远 发表于 2013-5-25 23:24
准备进21期。现在家里还有点事。

加油!!!希望学校看见你啊




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