如何在Java中存储表或矩阵?
我曾经使用八度音阶中的矩阵来存储数据集中的数据,在Java中,我如何才能做到这一点?假设我有10-20列和大数据,我不认为如何在Java中存储表或矩阵?,java,performance,data-structures,matrix,Java,Performance,Data Structures,Matrix,我曾经使用八度音阶中的矩阵来存储数据集中的数据,在Java中,我如何才能做到这一点?假设我有10-20列和大数据,我不认为 int [][]data; 这是最好的选择。嵌套映射是唯一的解决方案吗?您可以创建一个类坐标,该类接受X和Y值,并正确实现hashCode和equals 然后创建一个HashMap并使用它。到目前为止,我不会放弃多维数组:您尝试过吗?您是否发现了具体的限制?我想,只要你的数据能存储在内存中,阵列就可以很好 如果您的数据非常稀疏,您可能确实需要查看地图 相关问题顺便说一句
int [][]data;
这是最好的选择。嵌套映射是唯一的解决方案吗?您可以创建一个类
坐标
,该类接受X和Y值,并正确实现hashCode和equals
然后创建一个HashMap并使用它。到目前为止,我不会放弃多维数组:您尝试过吗?您是否发现了具体的限制?我想,只要你的数据能存储在内存中,阵列就可以很好 如果您的数据非常稀疏,您可能确实需要查看地图
相关问题顺便说一句:你可以使用多维数组,或者你可以尝试任何像HashMap这样的数组。我认为多维数组是最好的选择!它们应该符合你的目的。如果数据集仅为整数,则int[][]是理想的选择 取决于你需要做什么。如果您知道列表的大小,那么数组绝对是理想的,因为它意味着您可以立即访问(读/写时间)数组中的任何位置,这对于提高速度非常有用 如果你不知道地图的大小,它需要能够适应,那么地图会更好
最后,正如我在前一篇文章中发现的,如果你有大量的数据,而且很多数据将是“0”,你可能还想考虑使用
UL>。double-get(inti,intj){返回数据[i*n+j];}
- 对于一般表(稀疏矩阵),可以使用嵌套的映射,但是考虑使用库中的实现。
int[][]
这不是一个非常庞大的数据量(我们所说的≈500整数)所以这不是个坏主意 优点:这是一种更简单、更理想的方法(从数据结构方面来说),
尤其是当矩阵的每个“槽”都包含数据时 不便之处:在构建矩阵之前,您必须知道矩阵的大小。
无论如何,您可以稍后使用
数组
实用程序调整其大小也就是说,每个条目的键都是定义值所在位置的
java.awt.Point
优点:它比2D阵列更有效,尤其是当矩阵的一部分不包含数据时。
而且它是适应的;您不需要知道任何大小就可以构建/调整它 不便之处:如果矩阵的每个“槽”都包含数据,
您将失去(大量)空间和性能。二维阵列比二维阵列更有效
有关更多详细信息,请参阅
Map是最合适的解决方案,也是最容易使用的解决方案。为什么不
int[][]
?当你说存储时,你的意思是将这些数据写入磁盘,还是仅仅在内存中存储/处理它?@AdelBoutros真的吗?IMHO,如果你想要一个简单的矩阵,2D数组就是最好的选择。如果使用贴图
,则必须检查所有嵌套贴图是否具有相同的大小,这在2D数组上是不必要的;原因是大小的自适应性,我不知道数据集有多大,也不知道嵌套数组在主内存中是如何处理的。显然,这并不是一个太大的问题,因为我怀疑他是否会构建一个比4GB主内存更大的嵌套数组,而4GB主内存可能是目前比较常见的地方。然而,如果代码应该在内存有相关限制的机器上运行(例如嵌入式环境),则可能会出现性能问题。无论哪种方式,我都会选择SJuan76的选项。1)正如我在(结合了这两种方法)中所说的,当你分散了“点数”时,SJuan76的选项是好的;如果您有连续的数据(例如,矩阵上的每个坐标都有数据),则最好将它们按顺序存储在二维数组中。2) 他没有说他希望矩阵是自适应的还是固定的,所以正确的IMHO是给他两种方法。你不这么认为吗?+1你提出了一种简单、有效、适应性强(你不需要知道矩阵的大小)的方法。有一件事:如果你能使用,为什么要自己制作坐标?看。我没有想到,但无论如何,如果我不需要,我不喜欢依赖awt(如果在没有GUI的系统中启动java,可能会出现问题-是的,我知道它们是可以解决的,但为什么要冒险-)没有任何问题。诸如Point
或Color
之类的类始终存在,即使程序中没有GUI,它们也只能用作实用工具(用于制作几何图形、存储数据等)。当您尝试在非图形系统上创建GUI(即框架
)时,就会出现问题。我认为使用点
是安全的。我使用了它们,但我阅读了有关数组限制的内容,不知道这是否也适用于地图