pan_cras 2016-10-31 18:59 采纳率: 100%
浏览 3336
已采纳

一维数组和二维数组存储占用内存是否相同

import java.util.Arrays;

public class OneArrayMemory {

public static void main(String[] args) {
    long startTime1 = System.currentTimeMillis(); // 获取开始时间

    int num1 = 1024 * 1024 * 2;
    int[] arr1 = new int[num1];

    Arrays.fill(arr1, 1);

    // for(int x : arr1){
    // System.out.println(x);
    // }

    // 获得占用内存总数,并将单位转换成MB
    long memory1 = Runtime.getRuntime().totalMemory() / 1024 / 1024;

    System.out.println("用一维数组存储占用内存总量为:" + memory1);


    long endTime1 = System.currentTimeMillis(); // 获取结束时间

    System.out.println("程序运行时间: " + (endTime1 - startTime1) + "ms");

    long startTime2 = System.currentTimeMillis(); // 获取开始时间


    int num2 = 1024 * 1024;

    int[][] arr2 = new int[num2][2];

    for (int[] i : arr2) {
        Arrays.fill(i, 1);
    }

    // for (int[] i : arr2) {
    // for (int j : i) {
    // System.out.print(j);
    // }
    // }

    // 获得占用内存总数,并将单位转换成MB
    long memory2 = Runtime.getRuntime().totalMemory() / 1024 / 1024;

    System.out.println("用二维数组存储占用内存总量为:" + memory2);


    long endTime2 = System.currentTimeMillis(); // 获取结束时间

    System.out.println("程序运行时间: " + (endTime2 - startTime2) + "ms");
}

}

感觉和我的想法有出入啊……

用一维数组存储占用内存总量为:123
程序运行时间: 6ms
用二维数组存储占用内存总量为:123
程序运行时间: 72ms

展开全部

  • 写回答

7条回答 默认 最新

  • SeaTalks 2016-10-31 20:28
    关注

    首先,不管是一维数组还是二维数组都是数组类型(Array),而java中对于数组对象的头部中有三个域,分别是mark,klass和length(如想深入了解,可以看这里 ),其中length代表的是数组的长度,其后才是真正的所存的数据。而一维数组与二维数组最大的不同就是其数组中元素。一维数组中存的是数据本身,而二维数组中存的是指向另外一个一维数组的reference(事实就就是指针)。如果一维数组中元素的长度和引用类型长度相同的话,那一维数组与二维数组在相同元素条件下是内存占用量应该是相等的。如果一维数组元素的长度与引用类型长度不同,比如存的是char类型的数据,我认为就不相等了。你可以试一试。祝好!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部