Dud*_*udi 0 java arrays hashcode
我有一个对象有一个字段 - double [] _myField它的hashcode是
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(_myField);
return result;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我将对象用作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");
}
}
Run Code Online (Sandbox Code Playgroud)
我能想到上述IF语句为真的唯一原因是我得到了一个不同的密钥哈希码.
事实上,我已经改变了哈希码函数,在所有情况下都返回1.效率不高,但有利于调试,实际上IF语句总是错误的.
Arrays.hashcode()有什么问题?
请注意(在阅读一些注释后):1)至于在IF语句中使用!=,它确实比较了引用,但在上面的情况下它应该是相同的.无论如何奇怪的是右手边返回NULL 2)至于发布Equals功能.当然我已经实现了它.但这无关紧要.在调试中跟踪代码表明只调用了哈希码.原因可能是奇怪的是,返回的哈希码与原始哈希码不同.在这种情况下,Map找不到匹配的条目,因此不需要调用Equals.