gpt4 book ai didi

即使字符串和哈希码不同,Java Hashtable .containsKey(String key) 也会返回 true ...如何?

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

我目前在使用 Java 中的 Hashtable 时遇到了一些问题,其中 FEightPuzzle 是我创建的一个类。

在我的类中,我有一个字符串,它存储每个实例的键。现在,在我的程序中,当我在 Hashtable 内部检查重复实例时,我有时会“找到”一些,而实际上找到的实例是不同的。

以我调用 bol.containsKey(current.key) 为例,其中 bol 是一个 HT,current 是一个 FEightPuzzle。

当这是真的时,我检查键的值,它们是

current.key =
"8 14 11 0 6 12 13 1 10 4 5 9 15 2 3 7"

bol.get(current.key).key =
"12 8 4 0 13 9 5 1 14 10 6 2 15 11 7 3"

有值(value)观

current.key.hashCode() = -950607924

bol.get(current.key).key.hashCode() = -1856769042

很抱歉打扰你,但这个问题真的让我很困扰,这是我今晚最不希望说实话的事情(你不喜欢这样吗)...任何提示或答案将不胜感激!

最佳答案

我重新阅读了您的问题,据我了解您遇到了以下问题:

你会

bol.containsKey(current.key)

检查 current 是否已经在 bol 中。

当它返回 true 时,您希望 current.key 映射到的值确实应该是 current,但正如您的哈希码所示,它不是。

问题可能是以下之一:

  1. 一开始您没有将拼图对象正确地放入哈希表中。

    你应该这样做

    bol.put(somePuzzle.key, somePuzzle)
  2. 当谜题在 map 中时,您更改了 key 。这是不允许的。

    在映射中添加条目后,如果不删除/重新插入映射,则不能更改 key 。

    Hashtable 将根据您在插入时提供的键查找对象。

  3. 您不小心为多个不同的拼图对象提供了相同的键(在这种情况下,一个put 将覆盖之前的一个)


一个建议是让 FEightPuzzle 覆盖 hashCode 和 equals 并使用 HashSet 而不是 Hashtable。

关于即使字符串和哈希码不同,Java Hashtable .containsKey(String key) 也会返回 true ...如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5632315/

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