向hashSet中添加相同对象问题

xingda1989 2009-11-04 07:22:30


import java.util.*;
public class TestSet {
public static void main(String args[]) {
Set d = new HashSet();
//Name3 n1 = new Name3("n1");
//Name3 n2 = new Name3("n1");
//System.out.println(n1.equals(n2));
d.add(new Name3("n1"));
d.add(new Name3("n2"));
d.add(new Name3("n3"));
d.add(new Name3("n2"));//此对象无法加入,因为已经存在此对象

System.out.println(d);

}
}

class Name3 {
String name;

public Name3(String name) {
this.name = name;
}

public boolean equals(Object obj) {
if(obj instanceof Name3) {
Name3 n = (Name3)obj;
if(name.equals(n.name)) {
return true;

}else return false;
}

return false;
}

//必须重写hashCode
public int hashCode() {
// TODO Auto-generated method stub
return name.hashCode();
}

public String toString() {
return name;
}
}


以上写法中只要name的值相同,相同对象就不能添加

但我换成以下的写法,按我的理解两个new出来的对象,他们的hashCode应该是不一样的,所以我想他们应该可以都添加进去的,但结果相反,他们只添加进了一个

import java.util.*;
public class TestSet {
public static void main(String args[]) {
Set d = new HashSet();
//Name3 n1 = new Name3("n1");
//Name3 n2 = new Name3("n1");
//System.out.println(n1.equals(n2));
d.add(new Name3("n1"));
d.add(new Name3(new String("n2")));
d.add(new Name3("n3"));
d.add(new Name3(new String("n2")));//此对象无法加入,因为已经存在此对象

System.out.println(d);

}
}

class Name3 {
String name;

public Name3(String name) {
this.name = name;
}

public boolean equals(Object obj) {
if(obj instanceof Name3) {
Name3 n = (Name3)obj;
if(name.equals(n.name)) {
return true;

}else return false;
}

return false;
}


//必须重写hashCode
public int hashCode() {
// TODO Auto-generated method stub
return name.hashCode();
}

public String toString() {
return name;
}
}


请大侠们帮忙解答一下
...全文
274 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2009-11-04
  • 打赏
  • 举报
回复
客气客气~
以前我用这种方法的时候,往往是想把几个不是完全相同的对象,希望它们被Set当成是一个对象来看待,
于是重写hashCode方法。
xingda1989 2009-11-04
  • 打赏
  • 举报
回复
恩,谢谢回答
healer_kx 2009-11-04
  • 打赏
  • 举报
回复
hashCode可以被重写,你自己处理一个规则即可。hashCode是根据什么来确定,是不好说的。
比如说字符串,是根据字符串的值来确定的,但是其他的object是依据值吗?我不是很确定。
xingda1989 2009-11-04
  • 打赏
  • 举报
回复
我想知道的是,为什么两个分别new出来的对象,hashCode值会不一样,hashCode的值难道不是根据内存的吗?
xingda1989 2009-11-04
  • 打赏
  • 举报
回复
这个我知道,但是只是equals后相同,但hashCode值不一样的话,这两个对象还是判断为不一样的啊
healer_kx 2009-11-04
  • 打赏
  • 举报
回复
不能加相同的对象。。。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧