地图在番石榴地图

问题描述 投票:14回答:2

我有一些Map<String, Map<String, String>>对象的代码,它可以工作(它被实例化为HashMaps的HashMap),但我想知道是否有更好的方法来表示Guava中的这个数据结构。

我考虑过Multimap,但在Guava中有ListMultimapSetMultimap,我没有找到“MapMultimap”。

我也检查了Table,它似乎更像它,但它的名字让我感到不舒服:我拥有的绝对不是一张桌子而是一棵树。 (第二个键之间没有重叠)

是否有更好的番石榴替代品或我应该坚持使用Map<String, Map<String, String>>

java data-structures collections guava
2个回答
23
投票

Table似乎非常适合您的需求。但请确保选择正确的实施方案。特别是,如果您的第二个键都是不同的(表中的列),结果表将是稀疏的,您应该考虑到这一点来管理内存使用情况。

所以你应该避免使用ArrayTable,但可以使用任何其他实现。请注意,docs提到ImmutableTable已经优化了稀疏和密集数据集的实现。

如果您的Table是一次构建的,您可以使用ImmutableTable.Builder并从此优化中受益,并且如果表在多个线程之间共享,则可以简化您的生活。


12
投票

看看Guava的Table界面。

它的documentation示例似乎与您的用例重叠很多:

通常,当您尝试一次索引多个键时,最终将使用Map <FirstName,Map <LastName,Person >>等内容,这些内容难以使用且难以使用。 Guava提供了一种新的集合类型Table,它支持任何“row”类型和“column”类型的用例。

© www.soinside.com 2019 - 2024. All rights reserved.