我有一个要求,我需要使用一组值映射一组配置,理想情况下用Map<Map<String, Object>, Map<String, Object>>
结构表示。
配置和配置主要地图的价值部分是任意的&amp;因此,我无法使用具体的课程。
请提供有关此结构的一些反馈。可以将地图用作另一个地图的关键字。做了一些研究,我能够确定Map的equals方法利用了所有潜在的Key&amp; amp;将两个地图视为相等的值。此外,Map的HashCode基于Map的密钥的Hashcodes。这个IMO应该满足使用Map作为密钥的最低要求。
在我继续实施之前,我仍然希望有人来验证这一点。如果有更好的解决方案/设计,有人可以建议,请随意这样做。
修改
我最终使用了一个简单的代字号(&#39;〜&#39;)&amp; pipe(&#39; |&#39;)将String作为键和&amp;在需要时解构它。感谢所有帮助过的人。
答案 0 :(得分:16)
是的,HashMap
可以用作另一个地图的关键字,因为该类会正确覆盖.equals()
和.hashCode()
。
然而,它广泛地说bad idea to use mutable types(例如HashMap
)作为Map
键或Set
元素,因为如果对象发生变异,则违反了这些类所期望的不变量而在集合中。
虽然不是您想要的,但Guava提供了多个additional data structures,例如Multiset
,MultiMap
,BiMap
,Table
这可能有用。他们还提供immutable collections,例如ImmutableMap
(因为它们不能被突变)更安全地用作Map
密钥。这并不是说你应该这样做,只是说它是安全的(如果键和值也是不可变的)。
考虑发布一个问题,探讨导致您得出Map<Map<K, V>, Map<K, V>>
结构的问题。你可以得到那个问题的更好答案。