2011-04-29 58 views
4

如何初始化所有Integer.MAXVALUE的大小爲1000 * 1000 * 1000 * 1000的數組?Java以最大值初始化大數組

例如,我想使這個int[][][][]dp = new int [1000][1000][1000][1000];都具有最大值,因爲以後我需要比較最小值。

我試圖

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

,但它不與多維數組工作,誰能幫助?

+1

你想填充一個數組中的每一個值有一萬億的可能性嗎? – Mikecito 2011-04-29 05:32:38

回答

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); 
     } 
    } 
} 

你不會然而能夠初始化new int[1000][1000][1000][1000]除非你有至少3.64 TB的的記憶。更何況,如果你有這麼多的記憶,將需要多長時間。

+3

當它,我只有3.5 TB的內存... – MeBigFatGuy 2011-04-29 05:47:19

+0

哈哈很不錯:D – 2011-04-29 06:33:25

2

您需要非常專業的東西,如Colt來生成所謂的Sparse Matrix。你需要稍微改變一下你的邏輯,而不是根據你測試的Integer.MAX_VALUE進行測試,看看某個位置是否存在某個事物(默認爲零),如果它不考慮Integer.MAX_VALUE並且保持獨立。

這假設您只插入一小部分可能的數據值爲< Integer.MAX_VALUE

0

填充將需要作爲參數數組和填充每個維度的值。說填充(數組,0,0,0)或在你的情況下填充(數組,maxValue,maxValue,maxValue)。

歡呼聲,