在 Java 中,二维数组与一维数组一样,但是不同于 C 中的二维数组:
1. 在 Java 中,二维数组可以看成是以数组为元素的数组,例如:
int a[][] = {{1,2},{3,4,5,6},{7,8,9}};
易知:a[0] 表示一维数组{1,2};a[1] 表示一维数组{3,4,5,6};a[2] 表示一维数组{7,8,9}.
2. Java 中多维数组的声明和初始化应该按照从高维到低维(从左到右)的顺序进行,例如:
int a[][] = new int[3][];
a[0] = new int[2];
a[1] = new int[4];
a[2] = new int[3];
int t1[][] = new int[][4]; //非法
3. 二维数组的初始化
3.1 静态初始化
int aa[][] = {{1,2},{2,3},{3,4,5}};
int bb[3][2] = {{1,2},{2,3},{4,5}}; // 非法
3.2 动态初始化
int a[][] = new int[3][5];
int b[][] = new int[3][];
b[0] = new int[2];
b[1] = new int[3];
b[2] = new int[5];
4. Demo分析
Demo_1
public class Test{ public static void main(String[] args){ int a[][] = {{1,2},{3,4,5,6},{7,8,9}}; for(int i=0;i<a.length;i++){ for(int j=0;j<a[i].length;j++){ System.out.print("a["+i+"]["+j+"]= "+a[i][j]+" "); } System.out.println(); } } }
运行结果:
a[0][0]= 1 a[0][1]= 2
a[1][0]= 3 a[1][1]= 4 a[1][2]= 5 a[1][3]= 6
a[2][0]= 7 a[2][1]= 8 a[2][2]= 9
Demo_2
public class Test{ public static void main(String[] args){ String s[][] = new String[3][]; s[0] = new String[2]; s[1] = new String[3]; s[2] = new String[2]; for(int i=0;i<s.length;i++){ for(int j=0;j<s[i].length;j++){ s[i][j] = new String("我的位置是:"+"["+i+"]"+"["+j+"]"); } } for(int i=0;i<s.length;i++){ for(int j=0;j<s[i].length;j++){ System.out.print(s[i][j]+" "); } System.out.println(); } } }
运行结果:
我的位置是:[0][0] 我的位置是:[0][1]
我的位置是:[1][0] 我的位置是:[1][1] 我的位置是:[1][2]
我的位置是:[2][0] 我的位置是:[2][1]
5. 数组的拷贝:使用 Java.lang.System.arraycopy 的静态方法可以进行数组的拷贝工作,且不会创建新的对象;
调用格式如下:
System.arraycopy(src, srcPos, dest, destPos, length)
如果源数据数目超过目标数组边界会抛出 IndexOutOfBoundsException 异常
class Test { public static void main(String[] args){ String s[] = {"SongBo","YanJiXiong","WangHaoWei","ShangXiaoHui"}; String sbak[] = new String[6]; System.arraycopy(s, 0, sbak, 0, 4); for(int i=0;i<sbak.length;i++){ System.out.println(sbak[i]+" "); } } }
运行结果:
SongBo
YanJiXiong
WangHaoWei
ShangXiaoHui
null
null