我应该如何在Java中有效地存储大量数值数据?请批评我的解决方案

时间:2011-01-28 05:51:48

标签: java data-structures

我是一名软件实习生,设计一个解析工业模拟器输出的数据文件的程序,以便对它们进行计算。

文件的基本结构如下:

Property1

时间步1 0.000 3.141 5.131等...

时间步2 3.323 0.000等...

等...

需要在某种数据结构中收集数据,以便进行有效的计算。可能有数百万个数据点,但许多数据点的值相同。

我的解决方案(嵌套的HashMaps):

主对象DataContainer有一个HashMap,它包含属性名称作为键。这些键与它们自己的HashMaps相关联,其中包含时间步长数字作为键。这些键与它们自己的HashMaps相关联,这些HashMaps包含数据值作为与在时间步长内发生值的次数配对的键。

快速插图:

DataContainer    属性:

  property 1 : 
               time 1 - 0.000, 4 | 3.313, 10 etc...
               time 2

期待人们的投入。

3 个答案:

答案 0 :(得分:0)

如果您对效率感兴趣,最好使用属性/ getter / setter为属性创建自定义类。

包含HashMaps等的HashMaps:

  • 占用更多空间,
  • 比较慢,
  • 使用起来比较棘手......特别是如果你想以可预测的顺序迭代元素,
  • 否定了Java内在编译时类型安全的好处。

答案 1 :(得分:0)

我的想法:

class DataContainer{
   TreeMap timestamp<String, SortedList<Integer>>;

}

答案 2 :(得分:0)

我会选择两个长度相同的数组,如double[] value; int[] count;。这肯定比填充盒装值的Map.Entry占用更少的空间。我会在他们周围做一个简单的课程,并将其放入你的地图。