在写代码的时候,数组是最基础也最常用的数据结构之一。比如你要存一组学生的成绩,或者记录一周每天的气温,用数组就特别方便。Java里的数组操作其实并不复杂,掌握几个关键点就能上手。
声明和创建数组
Java中声明数组有两种写法,效果一样,看个人习惯:
int[] scores = new int[5];
// 或者
int scores[] = new int[5];
上面这行代码创建了一个长度为5的整型数组,所有元素默认是0。你也可以直接赋值初始化:
int[] temperatures = {23, 25, 24, 27, 26};
访问和修改元素
数组下标从0开始,想读取第三天的温度,就这么写:
System.out.println(temperatures[2]); // 输出24
想把第二天的温度改成28?直接赋值就行:
temperatures[1] = 28;
注意别越界,比如你只有5个元素,却去访问temperatures[5],程序就会抛出ArrayIndexOutOfBoundsException。
遍历数组
想打印所有元素,可以用for循环:
for (int i = 0; i < temperatures.length; i++) {
System.out.println(temperatures[i]);
}
更简洁的方式是用增强for循环(也叫foreach):
for (int temp : temperatures) {
System.out.println(temp);
}
常见操作:查找和排序
比如你想知道某个分数是否在数组里出现过,可以写个简单的查找:
boolean found = false;
for (int score : scores) {
if (score == 90) {
found = true;
break;
}
}
如果数组是无序的,这种线性查找是常规做法。如果已经排好序,可以用二分查找:
import java.util.Arrays;
Arrays.sort(scores); // 先排序
int index = Arrays.binarySearch(scores, 90); // 查找90的位置
数组复制
有时候你需要保留原数据,又想改一份副本。直接赋值是不行的,因为那只是引用:
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1;
arr2[0] = 99; // arr1[0] 也会变成99
正确复制方式有几种,推荐用Arrays.copyOf:
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
这样两个数组就完全独立了。
多维数组
二维数组在处理表格数据时很实用,比如表示一个3×3的棋盘:
int[][] board = new int[3][3];
board[0][0] = 1; // 设置左上角格子
// 遍历所有格子
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
System.out.print(board[i][j] + " ");
}
System.out.println();
}
Java的多维数组其实是“数组的数组”,每一行可以有不同的长度,不过一般我们用成规则矩阵就行。