多维数组真可怕!!

xueyong1203 2006-02-10 03:14:48
前些日子有人在讨论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

可怕~~~
...全文
176 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fronlin 2006-03-07
这么爽
回复
zengcity 2006-02-10
好经验,学习!
回复
aloney0226 2006-02-10
楼主真是一语惊醒梦中人啊!~
我在真机测过,果然乳齿!
回复
vvpang 2006-02-10
呼呼。。。

记住了。。

保存。。

感谢楼主~~~~
回复
相关推荐
发帖
J2ME
创建于2007-09-28

1.3w+

社区成员

Java J2ME
申请成为版主
帖子事件
创建了帖子
2006-02-10 03:14
社区公告
暂无公告