我们有一种情况,最终将使用多级哈希映射。也就是说,哈希图内部的哈希图深度为三到四个级别。

本能地在某处感觉不对。我在这里阅读过有关如何迭代/使用多级哈希映射的文章,但是几乎没有人说过什么是最佳实践。

为什么多级哈希映射不好,如果有的话,更好的设计是什么?

这是我们拥有的多级哈希映射的示例设计:

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)更好(类似于我上面的内容)。

10-05 18:53