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/