public class VO {
public int hashcode()
{
return 0;
}
public boolean equals(Object obj)
{
return true;
}
public static void main(String args[])
{
VO vo1 = new VO();
VO vo2 = new VO();
Map<VO,Integer> map = new HashMap<VO, Integer>();
map.put(vo1, 1);
map.put(vo2, 1);
System.out.println(map.size());
}
}
我得到的输出是:2
但据我所知,输出是1。
当我在map中放置一个元素时,它将检查键的哈希码,如果哈希码相同,它将检查equals.If,两个方法返回的值相同,它将覆盖先前的值。
在我的例子中,两个方法都是(hashcode和equals)返回0和true.So,最后在map.But中必须有一个元素,这里我将大小设为2。
dvance中的reason.Thanks是什么.
发布于 2014-09-05 17:37:45
你没有重写Object.hashCode
,你正在实现你自己的hashcode()
方法(注意大写的C)。
一个不错的做法是在重写时始终使用@Override
注释。请参阅:
https://stackoverflow.com/questions/25682833
复制相似问题