由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - JAVA equals()和hashCode()请教。
相关主题
谁在实际工作中写过c#或Java的custom attribute?FP就是忽悠
ft, 你们谁知道这个?Overridden function will cause function shadow in C++, but not in Java
求大牛指导这道题。结果是什么?请问Java里是否有类似<<>>的重载?
怎么覆写hashcode和equals比较好?很多有多年经验的Java程序员都会弄错的题目
捏着鼻子看scala b编程pattern请教java中compareTo的方法
TIJ上写错了?问一个关于Android Java的问题
请教个JAVA的小问题最近研究了一下 java AbstractQueuedSynchronizer
C, C++, Java, C#, Objective-C,两个看来相似的问题
相关话题的讨论汇总
话题: turtle话题: hashcode话题: equals话题: java话题: hashset
进入Programming版参与讨论
1 (共1页)
w*********n
发帖数: 439
1
根据JAVA的规定,Set中的元素是不可重复的。是否重复是由Set中元素equals()方法决
定。
我现在有一个Turtle类:重写了equals方法:
class Turtle{
int size;
public Turtle(int s){
size = s;
}
@Override
public boolean equals(Object o) {
return size== ((Turtle)o).size;
}
}
如果我写了向Set里面加入Turtle对象的话。应该有几个元素?
HashSet t = new HashSet();
t.add(new Turtle(1));
t.add(new Turtle(2));
t.add(new Turtle(1));
答案是3个,我的问题是第一个Turtle对象(new Turtle(1)) 和第3个Tut
le对象重复了t.add(new Turtle(1))?怎么还能加进去?
c********w
发帖数: 308
2
得把hashcode也写了
w*********n
发帖数: 439
3
问题是我如果不重写hashCode()为什么是3个不同对象?
c********w
发帖数: 308
4
应为放进去时候看hashcode. 默认的实现是
对象内存地址,显然不一样,所以都放进去了。

【在 w*********n 的大作中提到】
: 问题是我如果不重写hashCode()为什么是3个不同对象?
H****S
发帖数: 1359
5
取决于你是放的hashset还是treeset,前者需要override hashCode,后者需要
implement Comparable interface

【在 w*********n 的大作中提到】
: 根据JAVA的规定,Set中的元素是不可重复的。是否重复是由Set中元素equals()方法决
: 定。
: 我现在有一个Turtle类:重写了equals方法:
: class Turtle{
: int size;
: public Turtle(int s){
: size = s;
: }
: @Override
: public boolean equals(Object o) {

w****6
发帖数: 796
6
if hashset:
两步:
1)hashCode(), then
2)equals()
建议都一下<>:
hashCode() and equals() 必须同时 override and in sync
if treeset:
参见 HoboCS (Kane)
f*******n
发帖数: 12623
7
只要两个东西是equals的,就必须有一样的hashCode。你违反了这个规矩。
l****u
发帖数: 1764
8
没有重载hashCode()的话就默认用Object的hashCode(),这个函数每个对象返回一个不
同的code。你的两个new Turtle(1)的hashCode也是不同的,所以被当做不同的对象可
以共存于一个Set里面了
HashSet判断是否重复的依据是:如果hashCode相同,继续判断equals()是否为true,
true则两个object相同,false则不同;如果hashCode不同,直接跳过equals()函数,
这俩obj不同
1 (共1页)
进入Programming版参与讨论
相关主题
两个看来相似的问题捏着鼻子看scala b编程pattern
boost::unordered一问TIJ上写错了?
How does Garbage Collection in Java work?请教个JAVA的小问题
java ArrayList 一问C, C++, Java, C#, Objective-C,
谁在实际工作中写过c#或Java的custom attribute?FP就是忽悠
ft, 你们谁知道这个?Overridden function will cause function shadow in C++, but not in Java
求大牛指导这道题。结果是什么?请问Java里是否有类似<<>>的重载?
怎么覆写hashcode和equals比较好?很多有多年经验的Java程序员都会弄错的题目
相关话题的讨论汇总
话题: turtle话题: hashcode话题: equals话题: java话题: hashset