我的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/