-1

想象一下我有一个字节数组 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。

4

1 回答 1

1

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

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

什么时候maxCz是 7,这是一个 128 MB 的分配,所以数组会非常大。

于 2017-10-20T16:35:53.813 回答