`
feikiss
  • 浏览: 100034 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java中多维数组探讨及发散思考

阅读更多
今天在stackoverflow上面看到一个帖子讨论说关于提高数组效率的问题,看了下他的问题,是关于一个四维数组的效率问题,四维数组类似这样子:
ushort[, , ,] map = new ushort[3000, 3000, 3, 3];

暂且先不管为啥要搞一个四维数组(毕竟四维已经超出了人的立体思维想象了-_-),我随手写了一个测试类来测试,但是发现了一个更有意思的现象,数组声明方式不同会导致初始化的效率极大区别:
声明方式一:
int [][][][] map = new int[3000][3000][3][3];

声明方式二:
int [][][][] map2 = new int[3][3][3000][3000];

方式一花费时间大概为13秒,方式二花费时间不到1秒,而且内存耗费前者为1158000K,后者为342320K,相差3倍。
文字描述就这些,下面直接看代码:
public class MutipleArray {

    public static void main(String[] args) throws InterruptedException {
        long t0 = System.currentTimeMillis();
        int [][][][] map = new int[3000][3000][3][3];
        for (int i = 0; i < 3000; i++)
            for (int j = 0; j < 3000; j++)
                for (int k = 0; k < 3; k++)
                    for (int l = 0; l < 3; l++)
                       map[i][j][k][l] = 45001;
        long t1 = System.currentTimeMillis();
        System.out.println("Time for initializing the first Array:"+(t1-t0)+"ms");
       
        int [][][][] map2 = new int[3][3][3000][3000];
        for (int i = 0; i < 3; i++)
            for (int j = 0; j < 3; j++)
                for (int k = 0; k < 3000; k++)
                    for (int l = 0; l < 3000; l++)
                        map2[i][j][k][l] = 45001;
        long t2 = System.currentTimeMillis();
        System.out.println("Time for initializing the second Array:"+(t2-t1)+"ms");
        
        Thread.sleep(10000);
    }
}

结果:
Time for initializing the first Array:13570ms
Time for initializing the second Array:495ms


为什么同样容量的数组,效率却差别如此之大呢?
个人看法:
方式一:
int [][][][] map = new int[3000][3000][3][3];

其实相当于:
int [][][][] map = new int[3000*3000*3][3];

方式二:
int [][][][] map2 = new int[3][3][3000][3000];

相当于:
int [][][][] map2 = new int[3*3*3000][3000];

方式一需要JVM为map开辟3000*3000*3个内存大小为4个字节的3个连续空间。
方式二需要JVM为map1开辟3*3*3000个内存大小为4个字节的3000个连续空间,这一下子就把时间效率区别开了。但是为什么二者所占的内存大小却也相差3倍左右呢?没有继续探究,希望能抛砖引玉,大家在此讨论一下。

分享到:
评论

相关推荐

    易语言赋值定义多维数组

    在"易语言赋值定义多维数组"这个主题中,我们将深入探讨如何在易语言中创建、赋值以及操作多维数组。首先,我们要知道在易语言中定义多维数组的基本语法。例如,如果我们想要定义一个二维数组,可以这样写: ```...

    对C#中多维数组,进行学习.实现多维数组的输入和输出

    在本教程中,我们将深入探讨如何创建、初始化和操作多维数组,以及如何实现它们的输入和输出。 首先,让我们了解什么是多维数组。在C#中,多维数组本质上是一组一维数组的集合,可以是二维、三维,甚至是更高维度。...

    数据结构中有关多维数组的课程设计

    在本课程设计中,我们将深入探讨多维数组的原理、实现以及在实际问题中的应用。 首先,我们来理解多维数组的基本概念。多维数组可以视为一个矩阵,通常由行和列组成,但也可以扩展到三维甚至更高维度。例如,二维...

    java多维数组

    在Java中,多维数组可以帮助我们更好地管理和操作复杂的多层数据结构。例如,如果我们想要表示一个棋盘游戏的状态,二维数组是非常合适的,因为它可以很好地映射棋盘上的行列坐标。 #### 二、多维数组的理解 理解...

    易语言重定义多维数组

    在易语言中,处理多维数组是一项常见的任务,尤其是在需要处理复杂数据结构时。多维数组可以理解为数组的数组,它能够存储二维或更高维度的数据,比如表格、矩阵等。 本资源名为“易语言重定义多维数组源码”,意味...

    多维数组程序设计 多维数组程序设计

    多维数组程序设计是计算机科学中的一种重要技术,多维数组是指数组中的每个元素都是一个数组,多维数组可以用来描述复杂的数据结构。多维数组程序设计的主要目的是使用数组进行较为复杂的应用,学习使用数组进行数据...

    多维数组下标计算 多维数组下标计算 多维数组下标计算

    多维数组下标计算是指在计算机科学和编程语言中,对多维数组的元素进行访问和操作的过程。多维数组是指具有多个维度的数组,这种数组可以表示为矩阵、立方体、四维数组等形式。 一、数组(向量) 数组是一种基本的...

    数据结构多维数组课程设计

    未来可以进一步探索如何优化多维数组的存储结构,提高访问效率,以及如何在更复杂的场景中应用多维数组。 #### 五、参考资料 - 严蔚敏,《数据结构》 - 相关数据结构与算法书籍及在线资源 以上是对“数据结构多维...

    VB 多维数组实例

    本篇将深入探讨VB中的多维数组及其实例。 一、多维数组的基本概念 在VB中,多维数组可以是二维、三维甚至更高维度。一个二维数组可以视为一个表格,每个元素由行和列索引。例如,一个2x3的数组可以存储6个元素,用...

    Java中多维数组.pdf

    Java中多维数组.pdf 学习资料 复习资料 教学资源

    易语言子程序返回多维数组的实现方法

    本篇文章将深入探讨易语言中子程序如何返回多维数组,以及如何处理列表框数组。 首先,我们要理解易语言中的数组概念。数组是一种数据结构,它允许存储一组具有相同类型的元素。在易语言中,数组可以是一维的,也...

    设计并模拟实现整型多维数组类型

    在数据结构的学习中,设计并模拟实现整型多维数组类型是一项重要的实践任务。多维数组是计算机科学中处理复杂数据的一种基础结构,它能够帮助我们有效地存储和操作矩阵或类似表格的数据。在这个课程设计中,我们将...

    C++动态创建多维数组

    本实例将深入探讨如何使用`new`运算符来动态创建多维数组,以及如何处理多维数组指针。 首先,让我们了解`new`运算符的基本用法。`new`是C++中的一个关键字,用于在堆上分配内存。当我们声明一个数组时,可以使用`...

    数据结构源码:多维数组

    本篇将深入探讨多维数组的概念、实现方式以及它在源码中的应用。 多维数组可以看作是一组数组的集合,每个数组称为一个维度,这些维度可以相互关联,形成一个“数组的数组”。最简单的多维数组是二维数组,通常用于...

    C/C++中多维数组指针作为函数参数传递程序

    C/C++中多维数组指针作为函数参数传递程序 在 C++ 中,多维数组指针作为函数参数传递是非常常见的编程技术。本文将详细介绍如何在 C/C++ 中将多维数组指针作为函数参数传递,並对相关知识点进行详细解释。 多维...

    实例3 演示一维数组和多维数组的初始化和基本操作

    在Java编程语言中,数组是一种...通过实践这些操作,你可以更深入地理解Java中的数组概念,这对于编写高效、结构化的代码至关重要。在实际编程中,数组是解决各种问题的基础工具,熟练掌握其使用将大大提高编程效率。

    VB 做的多维数组实例程序

    在VB(Visual Basic)编程中,多维数组是一种强大的数据结构,它允许程序员存储和处理多个数据集合。这个“VB 做的多维数组实例程序”提供了实践操作多维数组的机会,通过逐步调试,我们可以深入理解其工作原理。 ...

    Java中使用数组完成学生成绩统计的多种实现代码清单.pdf

    1. **数组定义与初始化**:Java中的数组可以是多维的,例如`int a[][]`表示一个二维数组,每行和每列的元素都是整数。可以通过`{}`来初始化数组。 2. **遍历数组**:使用嵌套循环遍历二维数组,外层循环遍历行,内...

    nusoap 创建多维数组

    本篇文章将深入探讨如何使用nusoap库来创建多维数组,并在WebserviceStudio20中进行测试验证。 首先,我们需要理解多维数组的概念。多维数组是由一个或多个数组组成的数组,可以看作是表格形式的数据结构,常见的是...

    交错数组和多维数组分析

    而多维数组则是在连续的内存空间中存储所有的元素。 3. **访问方式**:交错数组和多维数组都可以通过索引来访问其元素,但交错数组的索引更复杂一些。 #### 五、交错数组的应用场景 交错数组非常适合于处理那些...

Global site tag (gtag.js) - Google Analytics