地图在地图在番石榴

2022-09-03 04:30:40

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

我已经考虑过,但是虽然有,但在番石榴中,我没有发现“MapMultimap”。MultimapListMultimapSetMultimap

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

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


答案 1

Table似乎很适合你的需要。但请确保选择正确的实现。特别是,如果第二个键都是不同的(表中的列),则生成的表将是稀疏的,您应该考虑到这一点来管理内存使用情况。

因此,您应该避免使用ArrayTable,但可以使用任何其他实现。请注意,文档提到ImmutableTable已经针对稀疏和更密集的数据集优化了实现。

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


答案 2

看看番石榴的桌子界面。

的文档示例似乎与您的用例有相当多的重叠:

通常,当您尝试一次索引多个密钥时,最终会得到像Map<FirstName,Map<LastName,Person>>之类的东西,这很难看,使用起来很尴尬。Guava提供了一种新的集合类型Table,它支持任何“行”类型和“列”类型的用例。


推荐