数组用来存储同一类型的一组数据,长度固定。

1. 数组的声明与初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class ArrayDemo {
public static void main(String[] args) {
// 方式一:静态初始化(知道具体元素)
int[] arr1 = {1, 2, 3, 4, 5};

// 方式二:动态初始化(先定长度,元素有默认值)
int[] arr2 = new int[5]; // 5 个元素,默认都是 0

// 访问元素:下标从 0 开始
System.out.println(arr1[0]); // 1
System.out.println(arr1[4]); // 5

// 数组长度
System.out.println(arr1.length); // 5

// 修改元素
arr2[0] = 100;
System.out.println(arr2[0]); // 100
}
}

不同数据类型的默认值:

类型 默认值
int / short / byte / long 0
float / double 0.0
char ‘\u0000’
boolean false
引用类型(如 String) null

2. 遍历数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ArrayTraverseDemo {
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50};

// 普通 for:可以拿到下标
for (int i = 0; i < arr.length; i++) {
System.out.println("下标 " + i + " 的值 = " + arr[i]);
}

// 增强 for:简洁,但拿不到下标
for (int n : arr) {
System.out.println(n);
}
}
}

3. 二维数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class TwoDArrayDemo {
public static void main(String[] args) {
// 3 行 3 列的矩阵
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

System.out.println(matrix[1][2]); // 6(第 2 行第 3 列)

// 遍历二维数组
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}

4. 数组工具类 Arrays

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Arrays;

public class ArraysDemo {
public static void main(String[] args) {
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6};

// 排序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [1, 1, 2, 3, 4, 5, 6, 9]

// 复制前 5 个元素
int[] copy = Arrays.copyOf(arr, 5);
System.out.println(Arrays.toString(copy)); // [1, 1, 2, 3, 4]

// 查找(需先排序),返回下标,找不到返回负数
int index = Arrays.binarySearch(arr, 5);
System.out.println(index); // 5

// 填充
int[] fill = new int[5];
Arrays.fill(fill, 7);
System.out.println(Arrays.toString(fill)); // [7, 7, 7, 7, 7]
}
}

5. 常见异常:数组越界

1
2
3
4
5
6
7
8
9
public class ArrayExceptionDemo {
public static void main(String[] args) {
int[] arr = {1, 2, 3};

// 下标超出 0 ~ length-1 的范围会抛异常
System.out.println(arr[5]);
// 运行报错:ArrayIndexOutOfBoundsException
}
}

小结

  • 数组长度固定,下标从 0 开始,到 length - 1 结束
  • 增强 for 适合遍历,普通 for 能拿到下标
  • 排序、复制、查找用 Arrays 工具类
  • 下标越界会抛 ArrayIndexOutOfBoundsException