Java 使用递归映射(映射的映射)是一种好的实践吗

Java 使用递归映射(映射的映射)是一种好的实践吗,java,data-structures,Java,Data Structures,我发现了这个旧代码段,它使用Map of Map of Map: Map sMap=null 除了给代码增加不必要的复杂性之外,它还使得对类进行单元测试变得困难 但是,我的经理说使用Map of Map是一种很好的做法,因为它提高了使用Map容器的效率。有什么想法吗 视情况而定。但我只想在这里提到一个替代方案,它可能更适合您的用例,也可能不适合您的用例:具有一个单一级别的映射,具有自定义类型的键 class MyMapKey { public String a; public long

我发现了这个旧代码段,它使用Map of Map of Map:

Map sMap=null

除了给代码增加不必要的复杂性之外,它还使得对类进行单元测试变得困难


但是,我的经理说使用Map of Map是一种很好的做法,因为它提高了使用Map容器的效率。有什么想法吗

视情况而定。但我只想在这里提到一个替代方案,它可能更适合您的用例,也可能不适合您的用例:具有一个单一级别的映射,具有自定义类型的键

class MyMapKey {
  public String a;
  public long b;
  public String c;
  // Implement equals() and hashCode() (or tell your IDE to do it)
}

Map<MyMapKey, String> sMap = null;
类MyMapKey{
公共字符串a;
公共长b;
公共字符串c;
//实现equals()和hashCode()(或者告诉IDE这样做)
}
Map sMap=null;

这通常会在向下查看地图时为您节省大量的
null
检查,因此简化了代码。例如,如果
a
设置为
“zoidberg”
,则无法有效地迭代所有项。

编写难以维护的代码不是一种好的做法

“效率”是一个常见的陷阱,它会浪费开发人员的时间(和金钱),因为在您拥有一个工作系统并能够实际测量事物之前,几乎不可能知道系统的哪些部分需要效率以及它们需要的效率。即使如此,在更好的硬件上运行代码通常比花费程序员时间使事情更高效更便宜

这就是说,地图地图的概念很有价值,而且已经有一些类以更为程序员友好的方式嵌入了这个概念。例如,番石榴或甚至是一种蔬菜可能是合适的


您还可以创建类似集合的类,这些类根据内部使用映射的域概念命名,从而隐藏复杂性并使代码更易于理解。

使用锤子是一种好的做法吗?如果你想钉钉子,可以。如果您想安装一个窗口,可能不会。当您试图理解代码时,效率并不重要,这样的构造会浪费您至少一个小时的时间试图理解作者的意思…请参阅,
Multimap
仅仅是一个可以多次包含同一键的映射;它与地图的地图无关。
Multimap
将取代值为
List
s的
Map
。我将其称为“多键”设计模式。非常有趣。我以后会试试的。我假设三个属性键可以替换为一个属性列表,第一个条目是主键,第二个是长to字符串,第三个是叶节点键。@RannLifshitz在这一点上,您几乎描述了通过任意树的路径,所以你可以考虑使用更多的树型数据结构。