假设我们有如下整数:
(1, 2)=10,
(2,3)=20,
(3, 4)=30
等...
这些整数分布在一个2000*2000
维的矩阵中。
但我只需要这个矩阵的4000-6000个元素及其索引(即它们的位置(i,j))。矩阵中的其他元素为零。所以我不需要它们。 除了使用二维Array / ArrayList之外,还有一个很好的方法来保存这些元素及其索引,因为我们可以轻松调用和重用元素及其索引吗?
使用Array / ArrayList消耗大量内存。
答案 0 :(得分:5)
拥有这种大小的二维数组将浪费内存,因为它将拥有4,000,000个元素。因为你只需要4000-6000个元素,所以这个数组非常稀疏。
您可以使用HashMap
将Point
映射到Integer
。
Map<Point, Integer> points = new HashMap<>();
您需要确保Point
课程能够正确覆盖hashcode
和equals
。
HashMap
只会存储您put
的4000-6000点。
答案 1 :(得分:2)
使用HashMap的解决方案非常好而且干净,但如果你需要线性代数算法,那就不明智了。
您可以使用la4j纯java开源线性代数库。它包含稀疏矩阵实现,如Compressed Row Storage和许多矩阵算法,如排名,分解,线性系统求解等等。