多维数组真可怕!!
前些日子有人在讨论int[50][2] 和int[2][50]谁更耗内存
手头一个项目刚好碰到这个情况
这个项目需要用到一个函数
输入半径,以某个基准点为圆心,得到圆形轨迹和碰撞检测矩形相交区域内的路径点的个数(这个圆其实是用查表的方式画的若干个点,这些点我这里姑且称做路径点),如果路径点的个数符合要求,则存储这个基准点,最后返回全部符合要求的基准点。
因为对路径点的个数有特定的要求,而且我苦思冥想了几个小时也没有发现一个简单且精确的判定方式,所以只好在一个范围内((12 + r) * (20 + r)左右)来遍历每个坐标点
int totalPoint = (12 + r) * (20 + r);//所有的点
最初我用于储存基准点的数组为int[][] validPos = new int[totalPoint][2]
validPos[index][0] = x;
validPos[index++][1] = y;
The Radious is 3
ValidPointerNum::10
MemoryUsed::14044
The Radious is 4
ValidPointerNum::25
MemoryUsed::17040
The Radious is 5
ValidPointerNum::34
MemoryUsed::20092
The Radious is 6
ValidPointerNum::59
MemoryUsed::23816
感觉占用内存有点大,然后该成byte[][] validPos = new byte[totalPoint][2]
::::byte::::
The Radious is 3
ValidPointerNum::10
MemoryUsed::12132
The Radious is 4
ValidPointerNum::25
MemoryUsed::14700
The Radious is 5
ValidPointerNum::34
MemoryUsed::17316
The Radious is 6
ValidPointerNum::59
MemoryUsed::20508
比较了一下,好象没有减少多少~~这时突然想起了int[50][2]和int[2][50]的那个帖子
于是就修改为
int[] validPos = new int[totalPoint << 1]
validPos[index] = x;
validPos[index + 1] = y;
index += 2;
这时候打印出来结果:
The Radious is 3
ValidPointerNum::20
MemoryUsed::4444
The Radious is 4
ValidPointerNum::50
MemoryUsed::5300
The Radious is 5
ValidPointerNum::68
MemoryUsed::6172
The Radious is 6
ValidPointerNum::118
MemoryUsed::7236
几乎减小了2/3
可怕~~~