gpt4 book ai didi

Java Hash Map containsKey 在不应该返回 true 时返回 true

转载 作者:行者123 更新时间:2023-11-29 07:11:23 24 4
gpt4 key购买 nike

所以我有这个方法可以将对象添加到显示中。首次打开显示时,所有现有对象都会一个一个地添加到 HashMap 中。之后用户可以添加更多对象,一次添加 1 个,这会将一个新对象放入 HashMap 中。

Key 是 Object,Value 是一个自定义类,包含 Object 和一些其他变量。

这一切工作正常,但是当显示关闭并打开一个新实例时,它应该重新加载所有对象(包括用户在使用过程中创建和保存的对象)但出于某种原因新创建的,它在执行 containsKey 时发现不正确的匹配。

我真的不明白为什么它在不应该的时候找到匹配项。当我执行 containsValue 时,它​​没有找到任何不正确的匹配项(它应该正常工作)但它没有帮助,因为当我使用 HashMap.put(K, V) 它会覆盖它会为 containsKey 返回误报的那个.

所有代码所做的就是遍历每个对象,检查 HashMap 是否已经包含键,如果包含则返回键的值,否则它会根据传递给方法的键创建一个值并将其放入 HashMap 。

很抱歉,我无法发布代码,所以如果没有它你无法提供帮助,我理解,但它是为了工作,我不确定是否可以发布代码,即使它只是一个片段.

如有任何帮助或指导,我将不胜感激,我仍在谷歌上四处搜索,看看是否能找到任何信息。

编辑:我找到了解决方案。哈希码函数返回的值本质上是一个索引。问题在于它在初始对象之后被重置,因此新添加的对象将从零开始覆盖现有对象。我修改了哈希码及其工作方式。

感谢大家的帮助。

最佳答案

似乎您已经覆盖了类中的 equals 方法,但没有覆盖 hashCode 方法。

请注意,如果您使用自定义类 对象作为HashMap 中的键,请确保您的类覆盖了equalshashCode 方法,否则你将永远无法在 HashMap 中再次找到 key

如果您覆盖 equals 而不是 hashCode,那么根据您的 equals 方法,您的 keys 可能是相等的, 但它的 hashCode 将由 Object 类方法的 hashCode 方法生成,它会为您的实例生成不同的 hashCode。

一般来说,如果您应该覆盖两个equals 和hashCode 方法,或者不覆盖它们。此外,为了计算 hashCodes,您应该只使用那些在 equals 方法中用于比较的属性。

此外,根据其中一条评论,您应该确保您的 Keys 是不可变的。

关于Java Hash Map containsKey 在不应该返回 true 时返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13587229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com