05 - JavaSE之数组
一维数组
-
java中的数组是引用类型,分配在堆空间上。
-
一维数组的声明方式:
type var[]; type[] var;
-
java中声明数组时不能指定其长度,如下,因为java中的数组是分配在堆空间的,需要new出来。
int[] a = new int[5];
动态初始化
- 数组定义与为数组元素分配空间和赋值的操作分开进行。
int a[];
a = new int[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
静态初始化
- 在定义数组的时候就为数组元素分配空间并赋值。
int a[] = {1, 2, 3};
Date days[] = {
new Date(1, 4, 2004);
new Date(2, 4, 2004);
new Date(3, 4, 2004);
}
数组元素的默认初始化
- 数组是引用类型,他的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐式初始化了。
int a[] = new int[3];
Date days = new Date[3];
// 则a中元素值为0;days中的元素值为null
二维数组
- java中多维数组的声明和初始化按照从多维到高维的顺序进行。
// 例如
int a[][] = new int [3][];
a[0] = new int[3];
a[1] = new int[4];
a[2] = new int[5];
// int t[][] = new int[][3]; // 错误
二维数组初始化
- 静态初始化
int A[][] = {{1,2}, {3,4}, {5,6,7}};
// 错误 int B[3][2] = {{1,2}, {3,4}, {5,6}};
// 错误 int B[][2] = {{1,2}, {3,4}, {5,6}};
// 错误 int B[3][] = {{1,2}, {3,4}, {5,6}};
- 动态初始化
int a[][] = new int[2][3];
// 或者
int b[][] = new int[2][];
b[0] = new int[3];
b[1] = new int[4];
数组的拷贝
- 使用 java.lang.System 类的静态方法
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
-
可以用于数组 src 从第 srcPos 项元素开始的 length 个元素拷贝到目标数组dest 的从 destPos 项开始的 length 个位置。
-
如果源数据数目超过目标数组边界会抛出 IndexOutOfBoundsException 异常。
public class TestArrayCopy {
public static void main(String args[]) {
String[] s =
{"Mircosoft","IBM","Sun","Oracle","Apple"};
String[] sBak = new String[6];
System.arraycopy(s,0,sBak,0,s.length);
for(int i=0;i<sBak.length;i++){
System.out.print(sBak[i]+" ");
}
System.out.println();
int[][] intArray = {{1,2},{1,2,3},{3,4}};
int[][] intArrayBak = new int[3][];
System.arraycopy
(intArray,0,intArrayBak,0,intArray.length);
intArrayBak[2][1] = 100;
for(int i = 0;i<intArray.length;i++){
for(int j =0;j<intArray[i].length;j++){
System.out.print(intArray[i][j]+" ");
}
System.out.println();
}
}
}