我需要为以下内容存储数据表:
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列表和映射方面是更好的做法?
答案 0 :(得分:3)
您绝对应该创建一个新对象,并将条目存储在对象列表或地图中,具体取决于ID及其类型的重要性。
主要原因是可读性。替代方案不仅相当优雅,而且很难阅读和理解。而且,它的伸缩性极差:如果您的对象不仅具有3-4个属性,而且具有10个属性,该怎么办?
另一个原因是语义。假设数据来自表格形式(例如关系数据库),则该表应表示一个实体,每个条目代表各种实体的属性。如果不使用自定义对象,则可以松开“实体”和“适当性”这个概念。
在某些情况下,当属性(成员)具有相同的类型时,可以选择地图 。从开发的角度来看可能更容易,仍然可以捕获“属性”的一些可读性,并且如果将其包含在限制访问的对象中(例如,只读,请勿错误地插入其他属性),则可以安全性也不错。
答案 1 :(得分:-3)
对于您描述的示例,您可能应该坚持“基本”和固有的Java数据结构。
像您一样创建自己的数据结构(即Object A
)会给您很大的自由度;特别是一旦您开始使用Java泛型和类似性质的东西。但是,Java固有的Collections API中的数据结构已经过优化,应尽可能使用。给定您列出的示例,您似乎并不需要太多疯狂的或超级应用程序特定的功能(至少不是还... ),因此应坚持使用“基本”类和结构工作正常。
See this post here解释了为什么应该尝试避免创建自己的数据结构和类。
TLDR:使用Java固有的“基本”功能