如何找出数组在初始化时必须多长时间?

How to find out how long an array has to be when being initialized?

假设我有一个字节数组 id。

以后我想这样存储数据:

ids[cz << 24 | cx << 16 | y << 8 | z << 4 | x]

在这种情况下,cz、cx、y、y、z、x 是 int 值。

那么创建数组时需要多长时间? 我以为我必须这样初始化数组:

byte[] ids = new byte[maxCz * maxCx * maxY * maxZ * maxX];

但它总是给我一个 ArrayIndexOutOfBoundsException。

OR 表达式中最大的组件是 cz << 24。假设maxCz为2k-1,其余max值的选择方式是不同分量的位不重叠,则需要分配

byte[] ids = new byte[(maxCz+1) << 24];

maxCz 为 7 时,这是一个 128 MB 的分配,因此数组将非常大。