如何在Java中存储表或矩阵?

如何在Java中存储表或矩阵?,java,performance,data-structures,matrix,Java,Performance,Data Structures,Matrix,我曾经使用八度音阶中的矩阵来存储数据集中的数据,在Java中,我如何才能做到这一点?假设我有10-20列和大数据,我不认为 int [][]data; 这是最好的选择。嵌套映射是唯一的解决方案吗?您可以创建一个类坐标,该类接受X和Y值,并正确实现hashCode和equals 然后创建一个HashMap并使用它。到目前为止,我不会放弃多维数组:您尝试过吗?您是否发现了具体的限制?我想,只要你的数据能存储在内存中,阵列就可以很好 如果您的数据非常稀疏,您可能确实需要查看地图 相关问题顺便说一句

我曾经使用八度音阶中的矩阵来存储数据集中的数据,在Java中,我如何才能做到这一点?假设我有10-20列和大数据,我不认为

int [][]data; 

这是最好的选择。嵌套映射是唯一的解决方案吗?

您可以创建一个类
坐标
,该类接受X和Y值,并正确实现hashCode和equals


然后创建一个HashMap并使用它。

到目前为止,我不会放弃多维数组:您尝试过吗?您是否发现了具体的限制?我想,只要你的数据能存储在内存中,阵列就可以很好

如果您的数据非常稀疏,您可能确实需要查看地图


相关问题顺便说一句:

你可以使用多维数组,或者你可以尝试任何像HashMap这样的数组。

我认为多维数组是最好的选择!它们应该符合你的目的。如果数据集仅为整数,则int[][]是理想的选择

取决于你需要做什么。如果您知道列表的大小,那么数组绝对是理想的,因为它意味着您可以立即访问(读/写时间)数组中的任何位置,这对于提高速度非常有用

如果你不知道地图的大小,它需要能够适应,那么地图会更好

最后,正如我在前一篇文章中发现的,如果你有大量的数据,而且很多数据将是“0”,你可能还想考虑使用

UL>。
  • 如果索引是小整数,当然可以使用嵌套数组
  • 在矩阵类中,您可能希望使用普通数组,如下所示:(假设n是列数)
  • 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(即
    框架
    )时,就会出现问题。我认为使用
    是安全的。我使用了它们,但我阅读了有关数组限制的内容,不知道这是否也适用于地图