多维数组真可怕!!

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

可怕~~~
...全文
203 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fronlin 2006-03-07
  • 打赏
  • 举报
回复
这么爽
zengcity 2006-02-10
  • 打赏
  • 举报
回复
好经验,学习!
aloney0226 2006-02-10
  • 打赏
  • 举报
回复
楼主真是一语惊醒梦中人啊!~
我在真机测过,果然乳齿!
vvpang 2006-02-10
  • 打赏
  • 举报
回复
呼呼。。。

记住了。。

保存。。

感谢楼主~~~~

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧