我有一个具有一个字段的对象-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。

最佳答案

数组在地图中时是否已更改?因为那会改变结果的结果。

08-18 17:53
查看更多