2017-10-20 93 views
-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。

+0

不知道'maxCz','maxCx','maxZ'或'maxX'在这里很难帮到你。 –

+0

它们表示cz,cx,x,y,z的最大值。例如:int cx = 7,int cz = 7,x = 16,y = 256,z = 16。 –

+0

这将是? –

回答

1

OR-ed表达式中最大的组件是cz << 24。假设maxCz是2 ķ -1,剩余max值的方式选择用于不同部件的位不重叠,则需要分配

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

maxCz是7,这是一个128 MB的分配,所以阵列将会非常大。