什么Java数据结构最适合双向多值映射

use*_*937 9 java dictionary bidirectional multivalue data-structures

我对Java比较陌生,我对哪种类型的数据结构最适合我的情况有疑问.我有一组基本上是键值对的数据,但是每个值可以对应于多个键,并且每个键可以对应于多个值.一个简化的例子是:

  • 红苹果
  • 青苹果
  • 红草莓
  • 绿葡萄
  • 紫色葡萄

考虑到上面的例子,我需要能够返回我拥有的颜色苹果和/或我拥有的红色水果.实际数据将基于输入文件动态生成,其中每个集合将是100-100,000个值,并且每个值可以对应于另一个集合中的数百个值.

存储和解析这些数据的最有效方法是什么?我希望尽可能使用java本机的解决方案,而不是像外部数据库那样的东西.

这个问题是相关的,但我不确定如何在我的情况下应用解决方案,因为我需要在两个方向上为每个键分配多个值.

Fed*_*ner 1

我建议你使用Guava的Table结构。使用颜色作为行键,使用水果作为列键,反之亦然。具体来说,HashBasedTable非常适合您的情况。

根据您的用例,您不需要为值存储任何内容。但是,这些Table不允许使用null值。您可以使用虚拟值Boolean或任何其他统计有用值,即插入日期和时间、用户、颜色/水果对的数量等。

Table有您需要的方法,例如column()row()。请记住,文档说这些结构针对行访问进行了优化。如果您计划使用一把钥匙进行多次访问,那么这可能适合您。