2012-10-06 52 views
3

當我讀到這個鏈接Java Criticism。在大陣列部分。有兩點我不明白:Java:大型陣列設計

Java還缺乏真正的多維數組(連續分配的內存由單一的間接訪問 單塊),這對於科學和技術計算 極限性能

在C中,我知道多維數組只是元素的連續記憶。所以,就像上面的部分一樣,Java中的每一行都是一個對象,多行就像多對象一樣,而且它們在內存中不是連續的,對吧?

Java已經被批評爲不支持超過231的陣列 - 1(約2.1十億)元素...陣列必須由INT 值來索引...嘗試與一個訪問陣列部件長索引 值導致編譯時錯誤

這是否意味着,如果我們可以通過長整數訪問數組組件,那麼數組的大小可以更大?那麼在那種情況下,那麼這個數組的大小還是很大的,對嗎?

謝謝:)

+0

您可以隨時使用多維列表來消除大小限制! – CKing

回答

3

...在Java中的每一行是一個對象,多行一樣多的對象,而且他們不連續的內存,對不對?

這是正確的。 Java多維數組是數組的數組,每個數組表示爲一個單獨的對象。

這是否意味着,如果我們可以通過長整數訪問數組組件,那麼數組的大小可以更大?

不。最大Java數組大小爲2^31 - 1個元素。

的JLS說,這在JLS 10.4

「陣列必須由INT的值來索引;也可以使用作爲索引值短,字節或字符的值,因爲它們經受一元數值升級( §5.6.1)併成爲int值。

嘗試訪問索引值較長的數組組件時,會導致編譯時錯誤。


總之,你鏈接到頁面正確中指出,Java是不適合於需要使用非常大的陣列的應用。 (可以解決這些限制,但是如果沒有將底層數組表示形式作爲對象進行包裝,就無法做到這一點,而且這會影響性能,並且意味着您不能使用[...]語法進行索引。)