我有一个具有一个字段的对象-double [] _myField
它的哈希码是
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(_myField);
return result;
}
但是,如果我将该对象用作Map中的键,则会出现以下怪异行为:
for (Map.Entry<MyObject, String> entry: _myMap.entrySet())
{
if (entry.getValue() != _myMap.get(entry.getKey()))
{
System.out.println("found the problem the value is null");
}
}
我能想到上面的IF语句是正确的唯一原因是我为密钥获得了不同的哈希码。
实际上,我已将哈希码函数更改为在所有情况下均返回1。效率不高,但是对于调试很有用,并且IF语句始终为false。
Arrays.hashcode()有什么问题?
请注意(阅读一些评论后):
1)至于IF语句中!=的用法,实际上它是比较引用的,但是在上述情况下,它应该是相同的。无论如何,奇怪的是右侧返回NULL
2)至于发布等于功能。当然我已经实现了。但这无关紧要。在调试中跟踪代码可以发现仅调用了哈希码。其原因大概是奇怪的事情,返回的哈希码与原始码不同。在这种情况下,地图找不到匹配的条目,因此无需调用Equals。
最佳答案
数组在地图中时是否已更改?因为那会改变结果的结果。