Arrays 在Scala中创建大量数组

Arrays 在Scala中创建大量数组,arrays,scala,matrix,Arrays,Scala,Matrix,我们知道,在scala中,要创建2D数组(矩阵),需要使用ofDim: def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]] 其中参数仅接受Int类型 如果我想创建一个包含大量元素的二维数组,其中应该使用long,该怎么办?除了即时通讯,我还能用什么 谢谢。即使您有足够的内存来容纳2^31-1个以上的数据类型元素,JVM也会将数组的长度限制为最多2^31-1个 所以简单的回答是:你不能。而且你可能没有足够的内存 但如果这样做,您可以创建自己的类,将

我们知道,在scala中,要创建2D数组(矩阵),需要使用ofDim:

def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]]
其中参数仅接受Int类型

如果我想创建一个包含大量元素的二维数组,其中应该使用long,该怎么办?除了即时通讯,我还能用什么


谢谢。

即使您有足够的内存来容纳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
  }
}
class BigArray[@T:reflect.ClassTag](大小:长){
private val data=数组.ofDim(1+(大小>>20).toInt,math.min(大小,1L>20).toInt)((i&((1>20).toInt)((i&)(1