java - Java 中的 HashMap。 hash.containsKey 返回意外的值

标签 java hash hashmap

我的 hashMap 有问题。更具体的是 containsKey。 我想检查我的哈希中是否存在一个对象。问题是,当我使用包含相同确切数据的 2 个不同对象调用此方法时,它们应该具有相同的 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。为什么以及如何解决这个问题?

谢谢!

最佳答案

问题的原因似乎是您没有重写 Person 类中的 equals 方法。 Hashmap 在搜索时需要它来定位键。

搜索 key 时执行的步骤如下:

1) 在对象(key)上使用 hashCode() 来定位可以放置 key 的适当存储桶。

2) 找到存储桶后,尝试使用 equals() 方法查找特定的 Key。

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

相关文章:

java - 我们如何引用文件的特定行?

Java IdentityHashMap 的 C# 等价物

java - hashmap 中键集和值的顺序是否相同

java - 1怎么大于4?

java - 如何更改子类的属性值

java - 最新的 Java/OS X 更新破坏了 My Ant

java - 方法同步线程问题

java - 在许多 GetHashCode 实现中,为什么在 xoring 之前乘以质数?

javascript - 用Java重现一个JavaScript路由器登录功能