Java编程那些事儿48—多维数组基本
副标题#e#
6.4 多维数组基本
在学校里,由于一个班的人数不多,所以凭据顺序编号即可,当人数增多时,譬喻对付学校里的人,在编号时就要增加条理,譬喻XX班XX号。在队伍中也是这样,XX师XX团XX营XX连XX排XX班,这里的条理就较量深了。为了打点数据的利便,一般要加深打点的条理,这就是多维数组的由来。
多维数组,指二维以及二维以上的数组。二维数组有两个条理,三维数组有三个条理,依次类推。每个条理对应一个下标。
在实际利用中,为了使布局清晰,一般对付巨大的数据都是用多维数组。
关于多维数组的领略,最终的是领略数组的数组这个观念,因为数组自己就是一种复合数据范例,所以数组也可以作为数组元素存在。这样二维数组就可以领略成内部每个元素都是一维数组范例的一个一维数组。三维数组可以领略成一个一维数组,内部的每个元素都是二维数组。无论在逻辑上照旧语法上都支持“数组的数组”这种领略方法。
凡是环境下,一般用二维数组的第一维代表行,第二维代表列,这种逻辑布局和现实中的布局一致。
和一维数组雷同,因为多维数组有多个下标,那么引用数组中的元素时,需要指定多个下标。
6.5 多维数组语法
下面以二维数组为例,来先容多维数组的语法。
6.5.1 多维数组声明
多维数组的声明:
数据范例[][] 数组名称;
数据范例[]数组名称[];
数据范例 数组名称[][];
以上三种语法在声明二维数组时的成果是等价的。同理,声明三维数组时需要三对中括号,中括号的位置可以在数据范例的后头,也可以在数组名称的后头,其它的依次类推。
譬喻:
int[][] map;
char c[][];
和一维数组一样,数组声明今后在内存中没有分派详细的存储空间,也没有设定命组的长度。
6.5.2 多维数组初始化
和一维数组一样,多维数组的初始化也可以分为静态初始化(整体赋值)和动态初始化两种,其语法名目如下。
#p#副标题#e#
6.5.2.1 静态初始化
以二维数组的静态初始化为例,来说明多维数组静态初始化的语法名目。示例代码如下:
int[][] m = {
{1,2,3},
{2,3,4}
};
在二维数组静态初始化时,也必需和数组的声明写在一起。数值书写时,利用两个大括号嵌套实现,在最里层的大括号内部书写数字的值。数值和数值之间利用逗号脱离,内部的大括号之间也利用逗号脱离。
由该语法可以看出,内部的大括号其实就是一个一维数组的静态初始化,二维数组只是把多个一维数组的静态初始化组合起来。
同理,三维数组的静态初始化语法名目如下:
int[][][] b = {
{
{1,2,3},
{1,2,3}
},
{
{3,4,1},
{2,3,4}
}
};
说明:这里只是演示语法名目,数值自己没有意义。
6.5.2.2 动态初始化
二维数组动态初始化的语法名目:
数据范例[][] 数组名称 = new 数据范例[第一维的长度][第二维的长度];
数据范例[][] 数组名称;
数组名称 = new 数据范例[第一维的长度][第二维的长度];
示例代码:
byte[][] b = new byte[2][3];
int m[][];
m = new int[4][4];
和一维数组一样,动态初始化可以和数组的声明分隔,动态初始化只指定命组的长度,数组中每个元素的初始化是数组声明时数据范例的默认值。譬喻上面初始化了长度为2X3的数组b,和4X4的数组m。
利用这种要领,初始化出的第二维的长度都是沟通的,假如需要初始化第二维长度纷歧样的二维数组,则可以利用如下的名目:
int n[][];
n = new int[2][];//只初始化第一维的长度
//别离初始化后续的元素
n[0] = new int[4];
n[1] = new int[3];
这里的语法就浮现了数组的数组观念,在初始化第一维的长度时,其实就是把数组n当作了一个一维数组,初始化其长度为2,则数组n中包括的2个元素别离是n[0]和n[1],而这两个元素别离是一个一维数组。后头利用一维数组动态初始化的语法别离初始化n[0]和n[1]。
6.5.3 引用数组元素
对付二维数组来说,由于其有两个下标,所以引用数组元素值的名目为:
数组名称[第一维下标][第二维下标]
该表达式的范例和声明数组时的数据范例沟通。譬喻引用二维数组m中的元素时,利用m[0][0]引用数组中第一维下标是0,第二维下标也是0的元素。这里第一维下标的区间是0到第一维的长度减1,第二维下标的区间是0到第二维的长度减1。
6.5.4 得到数组长度
#p#分页标题#e#
对付多维数组来说,也可以得到数组的长度。可是利用数组名.length得到的是数组第一维的长度。假如需要得到二维数组中总的元素个数,可以利用如下代码:
int[][] m = {
{1,2,3,1},
{1,3},
{3,4,2}
};
int sum = 0;
for(int i = 0;i < m.length;i++){//轮回第一维下标
sum += m[i].length; //第二维的长度相加
}
在该代码中,m.length代表m数组第一维的长度,内部的m[i]指每个一维数组元素,m[i].length是m[i]数组的长度,把这些长度相加就是数组m中总的元素个数。
文章来历:http://blog.csdn.net/Mailbomb/archive/2008/06/27/2591937.aspx