使用递归地图(地图地图)是一个好习惯吗

时间:2018-05-23 14:05:17

标签: java data-structures

我发现这个旧的代码片段使用了Map Map的地图:

Map<String, Map<Long, Map<String, String>>> sMap = null;

除了为代码添加不必要的复杂性之外,还很难对该类进行单元测试。

但是,我的经理说使用Map Map是一个好习惯,因为它提高了使用Map Container的效率。有什么想法吗 ?

2 个答案:

答案 0 :(得分:1)

这取决于。但是我想在这里提一个替代方案,它可能更适合您的用例:具有单一级别的地图,具有自定义类型的密钥。

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;

这通常会在降低地图级别时为您节省大量null次检查,因此简化了代码。但是,例如,您无法再有效地迭代a设置为"zoidberg"的所有项目。

答案 1 :(得分:1)

编写难以维护的代码并不是一种好习惯。

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

也就是说,地图地图的想法是有价值的,并且已经有一些类以更加程序员友好的方式嵌入该概念。例如,Guava的Table或者甚至Multimap可能是合适的。

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