use*_*937 9 java dictionary bidirectional multivalue data-structures
我对Java比较陌生,我对哪种类型的数据结构最适合我的情况有疑问.我有一组基本上是键值对的数据,但是每个值可以对应于多个键,并且每个键可以对应于多个值.一个简化的例子是:
考虑到上面的例子,我需要能够返回我拥有的颜色苹果和/或我拥有的红色水果.实际数据将基于输入文件动态生成,其中每个集合将是100-100,000个值,并且每个值可以对应于另一个集合中的数百个值.
存储和解析这些数据的最有效方法是什么?我希望尽可能使用java本机的解决方案,而不是像外部数据库那样的东西.
这个问题是相关的,但我不确定如何在我的情况下应用解决方案,因为我需要在两个方向上为每个键分配多个值.
我建议你使用Guava的Table结构。使用颜色作为行键,使用水果作为列键,反之亦然。具体来说,HashBasedTable非常适合您的情况。
根据您的用例,您不需要为值存储任何内容。但是,这些Table不允许使用null值。您可以使用虚拟值Boolean或任何其他统计有用值,即插入日期和时间、用户、颜色/水果对的数量等。
Table有您需要的方法,例如column()和row()。请记住,文档说这些结构针对行访问进行了优化。如果您计划使用一把钥匙进行多次访问,那么这可能适合您。