【发布时间】:2015-04-16 06:41:48
【问题描述】:
首先在 HashSet 中添加元素并打印 HashSet 的大小,返回结果如预期。但我修改了一个对象值并再次存储到 HashSet 并使用对象名称删除该对象。但我仍然得到与以前相同的大小。我的代码如下:
public class Test {
private String s;
public Test(String s){
this.s = s ;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet<Object> hs = new HashSet<Object>();
Test t1 = new Test("Keval");
Test t2 = new Test("Keval");
String s1 = new String("Keval");
hs.add(t1);
hs.add(t2);
hs.add(s1);
System.out.println("Set Size :: " + hs.size());
s1 = new String("Demo");
hs.remove(s1);
System.out.println("Set Size :: " + hs.size());
}
}
以上代码的输出是:
Set Size :: 3
Set Size :: 3 // Why it prints 3 insted of 2???
【问题讨论】:
-
提示:
"Keval"!="Demo" -
并不是说它回答了你的问题,但是如果你想在像 HashSet 这样的哈希结构中使用它们,你应该在你的
Test类中实现hashcode和equals方法。 -
s1 值在
hs.remove(s1);语句之前已更改 -
您正在尝试删除 hashSet 中不存在的对象,以标识您必须覆盖 .equals 和 .hashcode。
-
@Rupesh 你想说的是,如果我修改了 hashset 对象的值,然后我从 HashSet 中删除了该对象,它不会删除该对象,它仍然指向该对象?跨度>