地图在番石榴地图
我有一些代码与Map<String, Map>
对象有效(它被实例化为HashMaps的HashMap),但我想知道是否有更好的方法在Guava中表示这个数据结构。
我考虑过Multimap
,但是当Guava中有ListMultimap
和SetMultimap
时,我没有找到“MapMultimap”。
我也检查了桌子 ,它看起来更像是它,但它的名字让我感到不舒服:我所拥有的绝对不是一张桌子而是一棵树。 (第二个键之间没有重叠)
是否有更好的番石榴替代品或者我应该坚持使用Map<String, Map>
?
Table
似乎非常适合您的需要。 但请确保选择正确的实施方案。 特别是,如果您的第二个键都是不同的(表中的列),结果表将是稀疏的,您应该考虑到这一点来管理内存使用情况。
所以你应该避免使用ArrayTable,但可以使用任何其他实现。 请注意, 文档提到ImmutableTable
优化了稀疏和密集数据集的实现。
如果您的Table
是一次构造的,您可以使用ImmutableTable.Builder
并从此优化中受益,并且如果表在多个线程之间共享,则可以简化您的生活。
看看Guava的Table
界面。
它的文档示例似乎与您的用例重叠很多:
通常,当您尝试一次索引多个键时,最终将使用Map
>等内容,这些内容难以使用且难以使用。 Guava提供了一种新的集合类型Table,它支持任何“行”类型和“列”类型的用例。
- 有一种优雅的方法来获取Java中多个方法返回的第一个非null值吗?
- 使用java实现Public Suffix提取
- 如何在不改变equals和hashcode的情况下插入到set中
- 组合guava eventbus和AWT Event线程处理的最佳方法
- Guava不可变表的Java 8收集器
- 将java Map转换为自定义键=值字符串
- 可以按值的顺序迭代的映射
- 如果占用太多时间,如何取消AsyncRestTemplate HTTP请求?
- NoSuchMethodError:com.google.common.base.Stopwatch.createStarted()Lcom / google / common / base / Stopwatch