anz*_*aan 5 java hashmap multi-level
我们有一种情况,我们最终会使用多级哈希映射;也就是说,哈希映射内部的哈希映射,深度为三或四级。
本能地,这感觉哪里不对劲。我在这里读过讨论如何迭代/使用多级哈希映射的帖子,但几乎没有人说这方面的最佳实践是什么。
为什么多级哈希映射不好,如果有的话,什么是更好的设计?
这是我们拥有的多级哈希映射的示例设计:
Map<String, Object1> map1;
class Object1 {
String version;
Map<String,Object2> map2;
}
class Object2 {
Map<String,List<Object3>> map4;
Map<String,String> map5;
}
Run Code Online (Sandbox Code Playgroud)
只要它们被正确抽象,这没什么大不了的,但你会在可读性方面让自己陷入一些令人讨厌的兔子洞。如果没有抽象,维护它就会成为一场噩梦,没有开发人员会希望另一个如此。
本质上,您正在创建的是一个表格;第一个键是访问其他列的主键。对于简单的一级、二级或三级设计,这并不可怕;您需要三个键才能获得一个值。如果有一种方便的方法来访问它,如下所示,这并不是一个糟糕的主意(尽管有更好的方法)。
public interface Table<K1, K2, K3, V> {
V get(K1 key1, K2 key2, K3 key3);
}
Run Code Online (Sandbox Code Playgroud)
...但是,这一切都取决于您实际使用该数据结构做什么。如果您发现自己尝试迭代值的中间键(也就是说,您正在查看键 3 以获取它和键 5 之间的所有值的集合),那么此时您必须重新考虑您的业务逻辑。提供的数据结构不够灵活,无法处理所有情况;或多或少,它用于基于一组值的简单索引。
或者,人们可以研究GuavaTable,因为它可以做同样的事情,但有更好的接口(类似于我上面的接口)。