HashMap没有调用Object.equals?

bgr*_*nks 4 java collections object hashmap

我编写了一个类来覆盖类Object中的equals(Object)方法,以使用对象的实例值将类类型的对象与类类型的其他对象进行比较.

当我将一个对象的实例作为键放在HashMap中,然后在地图上调用get(Object)时,一个新的但相同的对象作为键,它返回null.

我已经尝试将一个新的,相同的对象传递给equals方法,它返回true,所以问题不是我的比较代码.

从我通过调试收集到的内容,我的对象中的equals(Object)方法永远不会被调用.

但是,如果在HashMap中使用String键,然后将具有相同字符的新实例传递给get(Object),则会成功返回该值.

为什么会这样?如何根据MY equals方法获取HashMap测试键?

nic*_*ild 11

你还需要覆盖Object.hashcode().看一下这个链接,因为它指定了这个链接hashcode()equals()签订合同以确保在HashTables,HashMaps和HashSets中具有正确的功能.

在a中HashMap,值存储在桶中,桶由密钥的哈希码到达.找到合适的存储桶后,将equals方法应用于存储桶的每个成员,直到确定相等为止.因此,确保您的哈希算法"哈希"很重要.