本帖最后由 李金中 于 2014-2-12 22:50 编辑
package com.itheima;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetTest {
public static void main(String[] args)
{
Demo d1 = new Demo(1);
Demo d2 = new Demo(2);
HashSet hs = new HashSet();
hs.add(d1);
hs.add(d2);
d2.setI(3);
System.out.println(hs.remove(d2));//hashCode返回值变了,所以找不到元素,删除失败。
Iterator it = hs.iterator();
while(it.hasNext())
{
System.out.println(it.next());//为什么能找到元素,打印成功
}
}
}
class Demo
{
Demo(int inum)
{
i = inum;
}
public void setI(int inum)
{
i = inum;
}
public int hashCode()
{
return i;
}
public boolean equals(Object obj)
{
return true;
}
public String toString()
{
return String.valueOf(i);
}
private int i;
}
看代码注释的两行,当重写hashCode时,不能随便修改跟hashCode有关的字段属性,因为你可能检索不到添加的对象了,可是为什么调用iterator还能打印出来该对象。。。
|