如何在Java中存储Matrix或Table之类的数据并从中有效地检索?

时间:2012-04-08 09:00:35

标签: java arrays matrix

我必须存储大约1000万行和多列的大数据表。我需要做的事情可归纳如下:

  

1.基于列中的值,我需要选择一些行。

示例:

第500行:| 10 | 3 | 4 | 5 | 100 | 314 | 45 |

第501行:| 13 | 5 | 7 | 4 | 160 | 210 | 40 |

第501行:| 24 | 3 | 8 | 6 | 260 | 810 | 50 |

第602行:| 34 | 7 | 9 | 6 | 350 | 760 | 10 |

这里,第一列值可以被视为行ID。这里的ID是10,13,24,34

假设我在第4列中搜索值> gt =的行。因此,在过滤后输出将是:

第500行:| 10 | 3 | 4 | 5 | 100 | 314 | 45 |

第501行:| 24 | 3 | 8 | 6 | 260 | 810 | 50 |

第602行:| 34 | 7 | 9 | 6 | 350 | 760 | 10 |

  

2.在第二步中,我需要以列式方式比较它们。假设,行500在其第二个中分别具有值3和4   第3列,(3-4)也在(3-8)的范围内。但是这个   范围与(7-9)不一致

因此,行500和行501之间存在关系。输出将为:

10 24

24 34

  

3.假设我得到值10.然后我需要在第一列中找到10行,并将第7列中的值减少5。所以   该行现在看起来像:

第500行:| 10 | 3 | 4 | 5 | 100 | 314 | 40 |

我到目前为止使用Matlab非常容易地使用matlab库函数进行这些操作。但是我需要用Java转换整个代码。一种方法是使用大型数组并使用for循环访问每一行。这样一个大阵列会有效吗?请帮助我。

2 个答案:

答案 0 :(得分:3)

首先,我建议使用内存中的RDBS,如SQLLiteHyperSQLJavaDB

之后,您可以查看google的guava库中的Table

基于行的查找在HashBasedTableTreeBasedTable时速度最快,但您可能需要考虑ArrayTable,因为您的数据看起来并不稀疏。

最后,看看this question

答案 1 :(得分:1)

我将尝试定义您的需求并基于它们,我将提供适当的数据结构。 1-您需要快速访问元素。    基于此避免使用LinkedList并使用ArrayList或静态数组。 2-因为你的数据很大我建议你不要在主内存上加载它们(动态加载)

注意:有更多高级方法可以通过使用B +树来优化您的访问,但我不想深入尝试上面所说的内容,我认为您不需要对其进行更多优化(如果您实现了正确有效地动态加载。)