我知道 Google 的 guava 甚至 Apache commons 都提供双向地图。但是,我想知道它们是如何实现的。从我发现的一点点来看,最简单的方法是使用 2 个单独的映射来存储键/值和值/键数据。但是,肯定有更好的方法吗?谷歌的实现肯定不是这么简单吗?魔法在哪里?
谢谢!
显然,仅此而已(Louis Wasserman)。
如果您考虑一下,实际上可以使用单个 Object->Object 映射来实现一种双向映射,将 (key,value) 对插入映射两次,每个方向一次。只要您不需要明确的逆视图,它就可以工作。在键和值是相同类型的情况下(允许相同的对象作为键和值),在给定的键和值之间只能有一个映射(O1->O2 意味着 O2->O1 ),而使用传统的 BiMap,您可以有效地拥有两个(O1->O2 逆 O2->O1 和 O3->O1 逆 O1->O3)。但是对于许多双向地图需求,单地图解决方案就足够了。