使用HashMap作为另一个HashMap的键

Sum*_*mit 6 java collections hashmap

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

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

请提供一些有关此结构的反馈.可以将地图用作另一个地图的关键字.做了一些研究,我能够确定Map的equals方法利用所有底层的Keys&Values来将两个Maps视为相等.此外,Map的HashCode基于Map的Keys的Hashcodes.这个IMO应该满足使用Map作为关键字的最低要求.

在我继续实施之前,我仍然希望有人来验证这一点.如果有更好的解决方案/设计,有人可以建议,请随时这样做.

编辑

我最终使用简单的代字号('〜')和管道('|')分隔String作为键并在需要时对其进行解构.感谢所有帮助过的人.

dim*_*414 17

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

然而,从广义上讲,使用可变类型(例如HashMap)作为Map键或Set元素是一个坏主意,因为如果对象在集合中发生变异,则会违反这些类所期望的不变量.

当你正在寻找不太什么,番石榴提供了几个额外的数据结构,例如Multiset,MultiMap,BiMap,Table这可能是有用的.它们还提供不可变的集合,例如ImmutableMap(因为它们不能被变异)更安全地用作Map密钥.这并不是说你应该这样做,只是说它是安全的(如果键和值也是不可变的).

考虑发布一个探索问题的问题,这个问题可以Map<Map<K, V>, Map<K, V>>让您根据需要得出结构.你可能会得到更好的答案问题.