gpt4 book ai didi

java - 使用一个 HashMap 作为另一个 HashMap 的键

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:44:19 26 4
gpt4 key购买 nike

我有一个要求,我需要用一组值映射一组配置,理想情况下用 Map<Map<String, Object>, Map<String, Object>> 表示结构。

主 map 的配置和值部分都是任意的,因此我无法使用具体类。

请对此结构提供一些反馈。一个 Map 可以用作另一个 Map 的键吗?通过一些研究,我能够确定 Map 的 equals 方法利用所有底层键和值将两个 Map 视为相等。此外, map 的哈希码基于 map 键的哈希码。此 IMO 应满足使用 Map 作为 key 的最低要求。

在我继续实现之前,我仍然希望有人对此进行验证。如果有人可以建议更好的解决方案/设计,请随时提出。

编辑

我最终使用简单的波浪号 ('~') 和竖线 ('|') 分隔字符串作为键,并在需要时解构它。感谢所有提供帮助的人。

最佳答案

是的,HashMap 可以用作另一个 map 的键,因为该类正确地覆盖了 .equals() .hashCode() .

然而,从广义上讲,它是一个 bad idea to use mutable types (例如 HashMap )作为 Map key 或Set元素,因为如果对象在集合中发生变化,您违反了这些类期望的不变量。

虽然不是您要找的东西,Guava提供几个additional data structures例如 Multiset , MultiMap , BiMap , Table这可能有用。他们还提供immutable collections例如 ImmutableMap哪个(因为它们不能突变)用作 Map 更安全 key 。这并不是说您应该这样做,只是说它是安全的(如果键和值也是不可变的)。

考虑发布一个问题,探索导致您得出结论的问题 Map<Map<K, V>, Map<K, V>>结构是你所需要的。对于那个问题,您可能会得到更好的答案。

关于java - 使用一个 HashMap 作为另一个 HashMap 的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42294037/

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