Java数组
·
二维数组的定义与使用
在Java中,二维数组可以看作是一个“数组的数组”,即每个元素是一个一维数组。定义二维数组的语法如下:
// 方式1:直接初始化
int[][] matrix1 = {{1, 2, 3}, {4, 5, 6}};
// 方式2:先声明再分配空间
int[][] matrix2 = new int[2][3]; // 2行3列
二维数组元素的引用
通过行索引和列索引可以访问或修改二维数组的元素:
int value = matrix1[0][1]; // 获取第1行第2列的元素(值为2)
matrix2[1][2] = 10; // 修改第2行第3列的元素为10
实用案例:矩阵乘法
两个矩阵相乘的条件是第一个矩阵的列数等于第二个矩阵的行数。示例代码如下:
public class MatrixMultiplication {
public static void main(String[] args) {
int[][] a = {{1, 2}, {3, 4}}; // 2x2矩阵
int[][] b = {{5, 6}, {7, 8}}; // 2x2矩阵
int[][] result = new int[a.length][b[0].length];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b[0].length; j++) {
for (int k = 0; k < b.length; k++) {
result[i][j] += a[i][k] * b[k][j];
}
}
}
// 输出结果矩阵
for (int[] row : result) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
}
}
输出结果为:
19 22
43 50
Arrays类的常用方法
java.util.Arrays类提供了操作数组的静态方法:
sort():对数组排序binarySearch():二分查找toString():转换为字符串fill():填充数组
实用案例:按中文名称排序
使用Arrays.sort()结合自定义比较器可以实现中文排序:
import java.util.Arrays;
import java.util.Comparator;
public class ChineseSort {
public static void main(String[] args) {
String[] names = {"张三", "李四", "王五", "赵六"};
Arrays.sort(names, Comparator.comparing(
str -> str,
(s1, s2) -> s1.compareTo(s2) // 按Unicode值比较
));
System.out.println(Arrays.toString(names));
}
}
数组实训任务
任务1:统计二维数组中的奇偶数
编写程序统计二维数组中奇数和偶数的个数。
任务2:数组元素交换
实现一个方法,将指定数组的指定索引位置的元素交换。
任务3:寻找鞍点
在二维数组中查找鞍点(即行中最大、列中最小的元素)。
任务4:数组去重
编写方法去除数组中的重复元素。
任务5:螺旋矩阵
生成并打印一个n×n的螺旋矩阵(数字从1开始螺旋递增)。
示例代码:螺旋矩阵生成
public class SpiralMatrix {
public static int[][] generateMatrix(int n) {
int[][] matrix = new int[n][n];
int num = 1;
int top = 0, bottom = n - 1, left = 0, right = n - 1;
while (num <= n * n) {
for (int i = left; i <= right; i++) matrix[top][i] = num++;
top++;
for (int i = top; i <= bottom; i++) matrix[i][right] = num++;
right--;
for (int i = right; i >= left; i--) matrix[bottom][i] = num++;
bottom--;
for (int i = bottom; i >= top; i--) matrix[i][left] = num++;
left++;
}
return matrix;
}
public static void main(String[] args) {
int[][] matrix = generateMatrix(4);
for (int[] row : matrix) {
System.out.println(Arrays.toString(row));
}
}
}
数组操作的最佳实践
- 边界检查:始终验证数组索引的有效性
- 使用增强for循环遍历数组更简洁
- 多维数组的实际内存分布是连续的
System.arraycopy()比循环复制更高效- 考虑使用
ArrayList等集合类处理动态数组需求
性能优化技巧
- 对于大型数组,并行排序
Arrays.parallelSort()效率更高 - 频繁插入/删除操作时,链表结构可能更合适
- 基本类型数组比对象数组更节省内存
更多推荐

所有评论(0)