让我们说我们有一堆数据(温度,风,压力)最终作为一些浮点数组出现。 例如:
float[] temp = //get after performing some processing (takes time)
float[] wind =
假设我们想要将这些值存储在内存中一天中的不同时段。将它们放在HashMap上更好:
HashMap maphr1 = new HashMap();
maphr1.put("temp",temp);
maphr1.put("wind",wind);
...
或者创建像Java这样的Java对象更好:
public class HourData(){
private float[] temp,wind,pressure;
//getters and setters for above!
}
...
// use it like this
HourData hr1 = new HourData();
hr1.setTemp(temp);
hr1.setWind(wind);
在这两种方法中,在性能,可读性,良好的OOP实践等方面表现更好
答案 0 :(得分:6)
你最好拥有一个HourData
课程来存储一组单个温度,风和压力值,如下所示:
public class HourData {
private float temp, wind, pressure;
// Getters and setters for the above fields
}
如果需要存储多组值,可以使用数组或HourData
个对象的集合。例如:
HourData[] hourDataArray = new HourData[10000];
与将数据数组存储在HourData类中相比,这最终更灵活,更高效,更直观。
<强>灵活性强>
我说这种方法更灵活,因为它可以选择使用哪种集合实现(例如ArrayList
,LinkedList
等)给HourData
的用户类。此外,如果他/她希望只处理一组值,这种方法不会强迫他们处理数组或集合。
<强>性能强>
假设您有HourData
个实例的列表。如果您按照描述的方式使用了三个float数组,那么访问第i个temp
,wind
和pressure
值可能会导致访问三个单独的pages在记忆中。发生这种情况是因为所有temp
值都将连续存储,然后是所有wind
值,后跟所有pressure
值。如果您使用类将这些值组合在一起,那么访问第i个temp
,wind
和pressure
值会更快,因为它们将全部存储在彼此相邻的位置存储器中。
<强>直观强>
如果您使用HashMap
,则任何需要访问任何字段的人都必须提前知道字段名称。 HashMap
个对象更适合于在编译时未知密钥的键/值对。使用包含明确定义字段的HourData
类,只需查看类API即可知道HourData
包含temp
,wind
和{{1}的值}}
此外,数组字段的getter和setter方法可能会令人困惑。如果我只想在列表中添加一组pressure
,temp
和wind
值,该怎么办?我是否必须获取每个数组,并将新值添加到它们的末尾?通过在pressure
周围使用仅包含单个值的“包装”集合,可以轻松避免这种混淆。
答案 1 :(得分:0)
你提到了一堆数据,所以我宁愿把它读作数据集合。
所以答案是,如果Java集合框架中已有的东西已经开箱即用,你为什么要为你编写一个。
您应该查看Java集合类,看看哪个更适合您的需求,无论是并发访问,快速检索时间还是快速添加时间等等。
希望这有帮助
EDIT ----
再添加一个维度。
您正在构建的应用程序类型也会影响您的方法。
上述讨论正确地提到了可读性,灵活性,性能作为您设计的驾驶标准。
但您正在构建的类型的应用程序也是影响因素之一。
例如,让我们假设您正在构建一个Web应用程序。
长时间存储在内存中的对象可以是应用程序或会话范围。因此,您必须通过设计使其不可变或将其用于线程安全方式。
不同实施中保持相同的业务数据应根据OOP或最佳实践进行设计,但基础架构或应用程序逻辑应更多地是您的框架驱动。
我觉得你在说什么,就像在内存中长时间保存一个对象更像是一个框架驱动的outlook,因此我建议使用Java Collection并将你的业务对象放在其中。重点是
答案 2 :(得分:0)
为了便于阅读,我肯定会选择一个对象,因为它更有意义。特别是因为您存储了不同的数据集,例如风长度具有与临时长度不同的含义。
除此之外,您还可以存储其他信息,例如测量的位置和时间。
答案 3 :(得分:0)
好吧,如果你没有任何关键来区分同一个对象的不同实例。我会创建HourData对象并将它们存储在数组列表中。
将数据放入包含的对象中总是会增加可读性。
答案 4 :(得分:0)
如果您有一个有限且已经定义的参数列表,那么最好使用第二种方法。
data.setTemp(temp)
优于map.put("temp", temp)
。第一种方法的好处之一是在编译期间会记录输入错误但是,如果您不知道参数以及是否要使用未分类(可扩展)参数集,则可能需要使用集合。