HashSet可以添加重复元素吗?

程猿薇茑
Java领域优质创作者
博客专家认证
2014-04-19 01:05:17

public class TestHashSet {
public static void main(String[] args) {
HashSet books=new HashSet();
books.add(new A());
books.add(new A());
books.add(new B());
books.add(new B());
books.add(new C());
books.add(new C());//应该只有一个C添加成功
print(books);
}

}
class A{
public boolean equals(){
return true;
}
}
class B{
public int hashcode(){
return 2;
}
}
class C{
public boolean equals(){
return true;
}
public int hashcode(){
return 1;
}
}
输出:
[com.set.C@1bc4459, com.set.C@12b6651, com.set.A@4f1d0d, com.set.B@c3c749, com.set.B@1bab50a, com.set.A@1fc4bec]
C对象的equals和hashcode都改写了啊,两次创建C应该相等啊。应该不能重复放进HashSet啊
...全文
1171 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
程猿薇茑 2014-04-19
  • 打赏
  • 举报
回复
引用 3 楼 kiyoki 的回复:
樓主,你應該Override的是 public boolean equals(Object obj) public native int hashCode() 而你寫的是 public boolean equals(){//沒參數,這個是overload return true; } public int hashcode(){//你這個方法名寫錯了 return 1; }
正解
kiyoki 2014-04-19
  • 打赏
  • 举报
回复
樓主,你應該Override的是 public boolean equals(Object obj) public native int hashCode() 而你寫的是 public boolean equals(){//沒參數,這個是overload return true; } public int hashcode(){//你這個方法名寫錯了 return 1; }
小灯光环 2014-04-19
  • 打赏
  • 举报
回复
只要使用new关键字去创建对象,就会给该对象分配新的内存地址,也就是说就是一个全新的对象。但是java.lang.Object的hashcode并不代表对象所在内存地址。
程猿薇茑 2014-04-19
  • 打赏
  • 举报
回复

public class TestHashSet {
	public static void main(String[] args) {
		HashSet books=new HashSet();
		books.add(new A());
		books.add(new A());
		books.add(new B());
		books.add(new B());
		books.add(new C());
		books.add(new C());//只有一个C添加成功
		print(books);
	}

}
class A{
	public boolean equals(){
		return true;
	}
}
class B{
	public int hashcode(){
		return 2;
	}
}
class C{
	public boolean equals(){
		return true;
	}
	public int hashcode(){
		return 1;
	}
}

62,614

社区成员

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

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