java - 我如何在不出现 OutOfMemoryError 的情况下存储 10,000 x 10,000 的二维数组?

标签 java algorithm data-structures

    int[][] arr = new int[10000][10000];

    for (int x = 0; x < 10000; x++) {
        for (int y = 0; y < 10000; y++) {
            arr[x][y] = 5;
        }   
    } 

显然,我得到了一个 OutOfMemoryError,那么什么是最好的数据结构来保存那么多的数据(它必须类似于二维数组 [行 x 列])。我还需要搜索它并更改元素。那么哪种数据结构最适合这种情况?

编辑: 澄清: - 数组中的所有元素都必须是整数。 - 数组中的所有元素都将是不同的值。 -我不必使用二维数组...我想知道是否有更好的数据结构可用于存储 1 亿个整数,而不是二维数组,这样它就不会给我一个 OutOfMemoryError,因为必须有更好的数据结构和良好的空间复杂度??

最佳答案

对于内存存储,2D 基元数组尽可能小。

对于绝对最小值,您可以使用一维原始数组并自己进行索引数学运算。

Java int 的长度为 4 个字节。一亿个整数大约是 400 Mb。使用今天的机器,您可能拥有足够的 RAM。

您确实需要确保您的 JVM 有足够的堆空间来容纳它。您可以使用命令行参数 -Xmx 设置最大堆空间量 - 例如,-Xmx768m 将最大堆大小设置为 768 Mb。

关于java - 我如何在不出现 OutOfMemoryError 的情况下存储 10,000 x 10,000 的二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27772557/

相关文章:

java - 我应该在主类或其他地方解析输入参数吗?

java - httpclient放置问题

c - 我的 contains 函数有什么问题?

java - 根据合并标准有效地合并列表

data-structures - 效率: What data structure to use. ..?

java - Eclipse 命令行参数

java - Gson按值对TreeMap的ArrayList进行排序

ruby - Rails 算法后内存泄漏?

java - 在 Java 中修剪二维数组的有效方法

algorithm - 使用最小二叉堆但没有更新功能的 Dijikstra 的时间复杂度是多少