A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天看到该问题,有点不懂?存储相同数据量的一维数组和 二维数组所占内存是否相同?
请大家探讨探讨哦!

6 个回复

正序浏览
sbeeqnui1987 发表于 2012-6-18 10:37
这两种定义模式 所占用的内存是相等的,在同等使用方法下 效率也相同,只是二维数组 有些时候可以减少编码长 ...

呵呵,建议你也看看一楼http://book.51cto.com/art/200904/119914.htm,
和三楼的建议
回复 使用道具 举报
刘笑 发表于 2012-6-18 10:42
大部分情况下存储相同量的数据一维数组和二维数组所占用的内存是不一样的。假设存储十个数据,用一维数组的 ...

喔,说的对喔!谢谢交流
回复 使用道具 举报
本帖最后由 rslheima 于 2012-6-18 14:19 编辑
黑马—陈磊 发表于 2012-6-18 10:26 http://book.51cto.com/art/200904/119914.htm ...


那你看我举得这两个例子怎么样!你试试?都是4M
//一位数组
public class MemFor1{
public static void main (String[] args) {
try{
int len=1024*1024;   //设定循环次数
byte [] abc=new byte[len];
for (int k=0;k<len;k++){
abc[k]=(byte)1;//是abc
}
System.out.print("已占用内存:");
System.out.println(
Runtime.getRuntime().totalMemory()/1024/1024+"M");
}
catch(Error e){
}
}
}
//----------------------------------------------------------------------------------
//二维数组
public class MemFor{
public static void main (String[] args) {
try{

byte [][] abc=new byte[1024][1024];
for (int k=0;k<1024;k++){
for (int j=0;j<1024;j++){
        abc[k][j]=(byte)1;
}
}
System.out.print("已占用内存:");
System.out.println(
Runtime.getRuntime().totalMemory()/1024/1024+"M");
}
catch(Error e){
}
}
}

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
大部分情况下存储相同量的数据一维数组和二维数组所占用的内存是不一样的。假设存储十个数据,用一维数组的话就开辟十个存储单元即可。但若用三行四列的二维数组的话则会空着两个存储单元。故用一维数组和二维数组所占用空间是不一样的。楼主请记:一般情况下,对于一个二维数组而言,它所占用的内存空间要远远大于它开辟的数组元素数

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这两种定义模式 所占用的内存是相等的,在同等使用方法下 效率也相同,只是二维数组 有些时候可以减少编码长度

他们占用的内存肯定是相等的,对于使用效率,光从定义是看不出来的,要看具体的应用了。从原理上说效率也是一样的,只不过二维数组更直观,使用更方便而已。
回复 使用道具 举报
推荐这篇文章:
《二维数组比一维数组占用更多内存空间》
http://book.51cto.com/art/200904/119914.htm
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马