如何在不获取OutOfMemoryError的情况下存储10,000乘10,000的二维数组?

Adp*_*Adp 2 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;
        }   
    } 
Run Code Online (Sandbox Code Playgroud)

显然,我得到一个OutOfMemoryError,那么用于保存该数据量的最佳数据结构是什么(它必须类似于2d数组[row x column]).我还需要搜索它并更改元素.那么什么样的数据结构最适合这种情况呢?

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

And*_*mas 9

对于内存存储,2D原始数组大小与您可以获得的一样小.

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

Java int长度为4个字节.一亿英镑约400马力.使用今天的机器,您可能拥有足够的RAM.

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