Java使用Max值初始化大型数组

时间:2011-04-29 05:29:29

标签: java arrays dynamic initialization

如何初始化所有1000 * 1000 * 1000 * 1000的大小Integer.MAXVALUE的数组?

例如,我想让这个int[][][][]dp = new int [1000][1000][1000][1000];都具有最大值,因为稍后我需要比较最小值。

我试过

int [] arr = new int arr[N];
Arrays.fill(arr,Integer.MAXVALUE);

但它不适用于多维数组,任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:12)

你必须这样做才能填满你的多维数组:

for (int i = 0; i < dp.length; i++) {
    for (int j = 0; j < dp[i].length; j++) {
        for (int k = 0; k < dp[j].length; k++) {
            Arrays.fill(dp[i][j][k], Integer.MAX_VALUE);
        }
    }
}

但是,除非您的内存至少 3.64太字节,否则您无法初始化new int[1000][1000][1000][1000]。更不用说如果你有那么多记忆需要多长时间。

答案 1 :(得分:2)

您需要一些非常专业的内容,例如Colt来生成所谓的Sparse Matrix。您需要稍微改变您的逻辑,而不是针对您测试的Integer.MAX_VALUE进行测试以查看某个位置是否存在某些内容(默认为ZERO),如果不存在,则将其视为Integer.MAX_VALUE并保留单独

这假设您只插入值为< Integer.MAX_VALUE的可能数据的一小部分。

答案 2 :(得分:0)

fill将需要作为参数的数组和每个维度填充的值。假设填充(数组,0,0,0)或在您的情况下填充(数组,maxValue,maxValue,maxValue)。

干杯,