Java最佳实践:嵌套地图

时间:2019-04-23 00:00:58

标签: java

我需要为以下内容存储数据表:

  

ID,月份,值1,值2

我当前正在使用:

List<Map<String, Map<String, Integer>>>

出于可读性考虑,我应该将其转换为以下内容:

List<ObjectA>

其中:

public ObjectA {
    private ID;
    private Map<String, ObjectB> map;
}
public ObjectB {
    private int value1;
    private int value2;
}

还是将其保留在基本的Java列表和映射方面是更好的做法?

2 个答案:

答案 0 :(得分:3)

您绝对应该创建一个新对象,并将条目存储在对象列表或地图中,具体取决于ID及其类型的重要性。

主要原因是可读性。替代方案不仅相当优雅,而且很难阅读和理解。而且,它的伸缩性极差:如果您的对象不仅具有3-4个属性,而且具有10个属性,该怎么办?

另一个原因是语义。假设数据来自表格形式(例如关系数据库),则该表应表示一个实体,每个条目代表各种实体的属性。如果不使用自定义对象,则可以松开“实体”和“适当性”这个概念。

在某些情况下,当属性(成员)具有相同的类型时,可以选择地图 。从开发的角度来看可能更容易,仍然可以捕获“属性”的一些可读性,并且如果将其包含在限制访问的对象中(例如,只读,请勿错误地插入其他属性),则可以安全性也不错。

答案 1 :(得分:-3)

对于您描述的示例,您可能应该坚持“基本”和固有的Java数据结构。

像您一样创建自己的数据结构(即Object A)会给您很大的自由度;特别是一旦您开始使用Java泛型和类似性质的东西。但是,Java固有的Collections API中的数据结构已经过优化,应尽可能使用。给定您列出的示例,您似乎并不需要太多疯狂的或超级应用程序特定的功能(至少不是还... ),因此应坚持使用“基本”类和结构工作正常。

See this post here解释了为什么应该尝试避免创建自己的数据结构和类。

TLDR:使用Java固有的“基本”功能