我是Java的新手,所以我不确定这里选择哪种数据结构会很好。我将加速度计,陀螺仪和磁力计数据(9个值)存储在一个列表中,以便以后用于平滑,显示和一些信号处理。
我的想法是创建一个具有十个成员的对象MyObject
:时间戳和九个方向/运动值,所有这些都浮动。然后,我将数据存储在ArrayList<MyObject>
中。这是一个好主意还是我忽视了什么?
该列表最多可保留100k值。
答案 0 :(得分:1)
答案 1 :(得分:0)
创建自己的课程是正确的方法。现在用于存储该类的对象......
如果您需要直接查找对象(例如,“给我第5个对象”),请使用ArrayList
。但是,如果您只是按顺序循环遍历所有对象,则应考虑使用linked list。
ArrayList
类使用一个原始数组,它将根据需要增长以容纳您添加到它的元素。当它增长其内部结构时,它需要分配一个新数组并复制所有原始值。这可能是昂贵的(特别是对于100K元素!)。您可以给它一个初始大小,以便在需要增长之前给它更多时间;但如果最终不需要这么多空间,ArrayList的内部数组可能会浪费大量内存。
向链表添加元素几乎不需要任何费用,因为不需要“增长”;它只是在列表中添加了另一个节点。但是你无法通过索引查找项目。你必须从第一个元素开始,然后遍历列表到你想要的元素。
答案 2 :(得分:0)
您可能需要考虑使用文件输出流直接输出数据,而不是将其存储在某些数据结构中:
output = new BufferedWriter(new FileWriter("output.csv"));
while(dataSource.stillHasData())
output.println(dataSource.getData().toString());
output.close();
使用BufferedWriter
可确保程序在获取下一个数据之前不必等待磁盘写入,因此这对于收集实时数据(通常)是可接受的。
然后,您应该在数据类中执行以下操作:
public String toString(){
StringBuilder buf = new StringBuilder();
buf.append(timeStamp); str.append(',');
// ...
// append all the other data
return buf.toString();
}
这样做的好处是你可以将它导入到像excel这样的程序中,或者实际上只是用于处理数据的任何程序。