gpt4 book ai didi

java - 我们可以将嵌套 map 作为其他 map 中的键吗?

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

我刚开始用 Java 实现数据结构,想知道我们是否会遇到这样的情况。

Map<HashMap<String,String>,String> map = new HashMap<HashMap<String,String>,String>(); 

如果是,请举一个小例子。

如果您没有找到相关的问题,请在评论中提及,

最佳答案

可以这样做,但在大多数情况下您不应该这样做。

映射的键需要保持不变,并且需要设置其等号和哈希码以提供正确的行为。如果您在将键添加到 map 后对其进行修改,则会使该 map 无效。

可以修改 HashMap,因此不应将其用作键。

要解释为什么更改它是一个问题,您需要了解 HashMap 的工作原理。这非常简单,但假设您有一个包含两个桶的 HashMap H。我们称它们为 B0 和 B1。

每当您将 Object 添加到 HashMap 时,它都会查看该对象的 hashCode。如果最后一位是 0 则它进入 B0,如果它是 1 则它进入 B1。

现在,当查找一个对象时,它会查看 hashCode 并立即转到正确的存储桶,然后它只需要搜索该存储桶中的对象即可找到它需要的对象。

通过使用比 2 个更多的桶,您可以将每个桶中的项目数量减少 2、4、8 或更多倍,从而减少需要检查的对象数量。

但是假设您在 map 中放置了一个对象并将其添加到 B0。然后您更改对象并且 hashCode 更改,因此最后一位现在是 1。

如果你执行 map.contains(obj) 你会得到 false 的结果,因为它会查看 hashCode,直接跳到 B1 并且只扫描那个对象。但是该对象被放置在 B0 中,因为这是 hashCode 在插入时所具有的内容。

这就是为什么对于在 HashMap 中用作键的任何对象,hashCode 必须是常量,否则您可能会“丢失”这些键。

关于java - 我们可以将嵌套 map 作为其他 map 中的键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25782057/

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