一、数组的特点
- 数组的每个元素同类型
- 数组的长度在申明后不可变
- 类型:基本数据类型和引用类型(对象)
二、数组的创建
- 两步走:申明(确定长度)和分配变量
申明:
type[] arrName; //推荐用法
type arrName[];
举个例子:
public class Test {
public static void main(String args[]) {
int[] s = null; // 声明数组;
s = new int[10]; // 给数组分配空间;
for (int i = 0; i < 10; i++) {
s[i] = 2 * i + 1;//给数组元素赋值;
System.out.println(s[i]);
}
}
}
注意事项:声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。
三、数组的初始化
1. 静态初始化
int[] a = { 1, 2, 3 };// 静态初始化基本类型数组;
Man[] mans = { new Man(1, 1), new Man(2, 2) };// 静态初始化引用类型数组;
2.动态初始化
int[] a1 = new int[2];//动态初始化数组,先分配空间;
a1[0]=1;//给数组元素赋值;
a1[1]=2;//给数组元素赋值;
3.默认初始化
int a2[] = new int[2]; // 默认值:0,0
boolean[] b = new boolean[2]; // 默认值:false,false
String[] s = new String[2]; // 默认值:null, null
四、二维数组
1.二维数组的申明
public class Test {
public static void main(String[] args) {
// Java中多维数组的声明和初始化应按从低维到高维的顺序进行
int[][] a = new int[3][];
a[0] = new int[2];
a[1] = new int[4];
a[2] = new int[3];
// int a1[][]=new int[][4];//非法
}
}
2. 静态初始化
int[][] a = {{1,2},{3},{4,5,6}};
3.动态初始化
int[][] a = new int[2][];
a[0] = new int[]{1,2,3};
a[1] = new int[]{3,5};
4.使用二维数组
(1) 获取长度
/获取的二维数组第一维数组的长度。
System.out.println(a.length);
//获取第二维第一个数组长度。
System.out.println(a[0].length);
(2) 输出
System.out.println(a[0][2]);
System.out.println(Arrays.toString(a[0]));
(3) 打印全部元素
for循环版:
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]);
}
System.out.println();
}
foreach版:
int[][] array = {{1,2,3},{4,5,6},{7,8,9}};
for(int[] a: array){
for(int m: a){
System.out.print(m);
}
System.out.println();
}
五、foreach语句
int[] a = {1,2,3,4,5};
for(int x : a){
System.out.println(x);
}
注意: for-each增强for循环在遍历数组过程中不能修改数组中某元素的值。
六、数组操作的常用类java.util.Arrays类
-
比较数组:equals()方法 (deepEquals()用于多维数组)
-
打印数组:Arrays.toString(数组名);
-
数组排序:Arrays.sort(数组名);
-
二分查找:Arrays.binarySearch(数组名,查找的元素)。
-
元素替换:Arrays.fill(数组名,元素值)
-
数组复制:Arrays.copyOf(数组名,复制后新数组的长度)
System.arraycopy(数组1,i,数组2,j,需要复制的元素的个数)
以上具体方法查看官方文档,或者使用编译器时可查看。