我们有一种情况,最终将使用多级哈希映射。也就是说,哈希图内部的哈希图深度为三到四个级别。
本能地在某处感觉不对。我在这里阅读过有关如何迭代/使用多级哈希映射的文章,但是几乎没有人说过什么是最佳实践。
为什么多级哈希映射不好,如果有的话,更好的设计是什么?
这是我们拥有的多级哈希映射的示例设计:
Map<String, Object1> map1;
class Object1 {
String version;
Map<String,Object2> map2;
}
class Object2 {
Map<String,List<Object3>> map4;
Map<String,String> map5;
}
最佳答案
只要对它们进行适当的抽象,就没什么大不了的,但是就可读性而言,您会让自己陷入困境。如果没有抽象,则保持该状态将成为噩梦,这是任何开发人员都不希望在另一个应用程序上实现的。
本质上,您要创建的是一张表格。第一个键是用于访问其他列的主键。在简单的一级,二级或三级设计中,这并不可怕。您需要三个键来获得一个值。只要有一种方便的方法来访问它,如下面所示,这并不是一个糟糕的主意(尽管那里有更好的方法)。
public interface Table<K1, K2, K3, V> {
V get(K1 key1, K2 key2, K3 key3);
}
...但是,这一切都取决于您实际上对该数据结构所做的工作。如果您发现自己尝试对值的中间键进行迭代(也就是说,您正在查看键3以收集键和键5之间的所有值),那么您必须重新考虑您的业务逻辑。提供的数据结构不够灵活,无法处理所有情况。或多或少,它用于基于一组值的简化索引。
或者,可以查看Guava
Table
,因为它做同样的事情,但接口(interface)更好(类似于我上面的内容)。