我的hashMap有问题。使用containsKey更具体。
我想检查哈希中是否存在对象。问题是,当我使用包含相同确切数据的两个不同对象调用此方法时,这些对象应具有相同的hashCode。

Person pers1,pers2;
pers1=new Person("EU",22);
pers2=new Person("EU",22);

public int hashCode(){ //From Person Class
    return this.getName().hashCode()+age;
}


在将pers1键插入我的哈希并调用“ hash.containsKey(pers1);”之后返回true,但“ hash.containsKey(pers2)”返回false。为什么以及如何解决此问题?

谢谢!

最佳答案

containsKey()使用您似乎没有覆盖的.equals()方法。 .hashCode()在哈希表上提供规范化(理想情况下)的分布,它不进行任何相等比较(除了要求两个相等的对象需要相同的哈希码)。

如您在源代码中看到的:

if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k))))

关于java - Java中的HashMap。 hash.containsKey返回意外,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23659433/

10-09 01:29