2
我們知道,在階,以創建二維陣列(矩陣),ofDim用於創建大量陣列的:Scala中
def ofDim[T](n1: Int, n2: Int): Array[Array[T]]
其中參數只接受int類型。
如果我想創建一個包含大量元素的二維數組,那麼應該使用多長時間?我可以使用其他什麼方式來代替迪姆?
謝謝。
我們知道,在階,以創建二維陣列(矩陣),ofDim用於創建大量陣列的:Scala中
def ofDim[T](n1: Int, n2: Int): Array[Array[T]]
其中參數只接受int類型。
如果我想創建一個包含大量元素的二維數組,那麼應該使用多長時間?我可以使用其他什麼方式來代替迪姆?
謝謝。
即使您有足夠的內存來擁有超過您數據類型的2^31-1個元素,JVM也會將數組限制爲最多2^31-1的長度。
所以簡短的回答是:你不能。無論如何你可能沒有足夠的記憶。
但是,如果你這樣做,你可以創建自己的類,它包裝數組的數組作爲一個數組:
class BigArray[@specialized T: reflect.ClassTag](size: Long) {
private val data = Array.ofDim(1 + (size >> 20).toInt, math.min(size, 1L << 20).toInt)
def apply(i: Long): T = data((i >> 20).toInt)((i & ((1 << 20)-1)).toInt)
def update(i: Long, value: T) {
data((i >> 20).toInt)((i & ((1 << 20)-1)).toInt) = value
}
}
,然後用這個。請注意,試圖將大量數據放入大多數現有集合類型中都會破壞它,因此您可能只需將其索引爲舊式(手動)方式。
現在您已經擁有了這個功能,您可以創建BigArrays BigArrays並手動爲它們設置索引來放置元素(並初始化空的BigArray)。
但可能有更好的方法來解決這個問題,使您想要創建如此巨大的數組。