Java多维数组 #
一、多维数组概述 #
多维数组是数组的数组,最常用的是二维数组。Java中多维数组可以是不规则的。
二、二维数组 #
2.1 声明 #
java
// 推荐方式
int[][] arr1;
// 不推荐方式
int arr2[][];
int[] arr3[];
2.2 创建 #
java
// 方式1:指定行和列
int[][] arr1 = new int[3][4]; // 3行4列
// 方式2:只指定行数
int[][] arr2 = new int[3][]; // 3行,列数待定
// 方式3:静态初始化
int[][] arr3 = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
2.3 访问元素 #
java
int[][] arr = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 访问元素
System.out.println(arr[0][0]); // 1
System.out.println(arr[1][2]); // 6
// 修改元素
arr[0][0] = 100;
2.4 获取长度 #
java
int[][] arr = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println(arr.length); // 3(行数)
System.out.println(arr[0].length); // 3(第0行列数)
System.out.println(arr[1].length); // 3(第1行列数)
三、二维数组遍历 #
3.1 双重for循环 #
java
int[][] arr = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
3.2 增强for循环 #
java
int[][] arr = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int[] row : arr) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
3.3 使用Arrays.deepToString #
java
import java.util.Arrays;
int[][] arr = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println(Arrays.deepToString(arr));
// [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
四、不规则数组 #
4.1 创建不规则数组 #
java
// 每行列数不同
int[][] arr = new int[3][];
arr[0] = new int[1]; // 第0行1列
arr[1] = new int[2]; // 第1行2列
arr[2] = new int[3]; // 第2行3列
// 静态初始化
int[][] arr2 = {
{1},
{2, 3},
{4, 5, 6}
};
4.2 遍历不规则数组 #
java
int[][] arr = {
{1},
{2, 3},
{4, 5, 6}
};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
五、二维数组应用 #
5.1 矩阵运算 #
java
public class Matrix {
// 矩阵加法
public static int[][] add(int[][] a, int[][] b) {
int rows = a.length;
int cols = a[0].length;
int[][] result = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[i][j] = a[i][j] + b[i][j];
}
}
return result;
}
// 矩阵乘法
public static int[][] multiply(int[][] a, int[][] b) {
int rows = a.length;
int cols = b[0].length;
int common = a[0].length;
int[][] result = new int[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
for (int k = 0; k < common; k++) {
result[i][j] += a[i][k] * b[k][j];
}
}
}
return result;
}
}
5.2 杨辉三角 #
java
public static void printYanghui(int n) {
int[][] arr = new int[n][];
for (int i = 0; i < n; i++) {
arr[i] = new int[i + 1];
arr[i][0] = 1;
arr[i][i] = 1;
for (int j = 1; j < i; j++) {
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
for (int[] row : arr) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
}
5.3 棋盘游戏 #
java
public class ChessBoard {
private int[][] board = new int[8][8];
public void init() {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
board[i][j] = 0;
}
}
}
public void placePiece(int row, int col, int piece) {
board[row][col] = piece;
}
public void print() {
for (int[] row : board) {
for (int cell : row) {
System.out.print(cell + " ");
}
System.out.println();
}
}
}
六、三维数组 #
6.1 创建三维数组 #
java
// 创建三维数组
int[][][] arr = new int[2][3][4];
// 静态初始化
int[][][] arr2 = {
{
{1, 2, 3},
{4, 5, 6}
},
{
{7, 8, 9},
{10, 11, 12}
}
};
6.2 遍历三维数组 #
java
int[][][] arr = {
{
{1, 2, 3},
{4, 5, 6}
},
{
{7, 8, 9},
{10, 11, 12}
}
};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
for (int k = 0; k < arr[i][j].length; k++) {
System.out.print(arr[i][j][k] + " ");
}
System.out.println();
}
System.out.println("---");
}
七、数组内存分析 #
7.1 二维数组内存结构 #
java
int[][] arr = new int[3][2];
// 栈内存:存储arr引用
// 堆内存:
// - arr[0] → int[2] {0, 0}
// - arr[1] → int[2] {0, 0}
// - arr[2] → int[2] {0, 0}
7.2 不规则数组内存 #
java
int[][] arr = new int[3][];
arr[0] = new int[1];
arr[1] = new int[2];
arr[2] = new int[3];
// 每行指向不同长度的数组
八、常见操作 #
8.1 查找元素 #
java
public static boolean contains(int[][] arr, int target) {
for (int[] row : arr) {
for (int num : row) {
if (num == target) {
return true;
}
}
}
return false;
}
8.2 求和 #
java
public static int sum(int[][] arr) {
int total = 0;
for (int[] row : arr) {
for (int num : row) {
total += num;
}
}
return total;
}
8.3 转置矩阵 #
java
public static int[][] transpose(int[][] matrix) {
int rows = matrix.length;
int cols = matrix[0].length;
int[][] result = new int[cols][rows];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[j][i] = matrix[i][j];
}
}
return result;
}
九、注意事项 #
9.1 空指针检查 #
java
int[][] arr = new int[3][];
// arr[0]是null
// arr[0].length; // NullPointerException
// 安全检查
if (arr[0] != null) {
System.out.println(arr[0].length);
}
9.2 索引越界 #
java
int[][] arr = {
{1, 2, 3},
{4, 5}
};
// arr[0][3]; // ArrayIndexOutOfBoundsException
// arr[2][0]; // ArrayIndexOutOfBoundsException
十、总结 #
| 操作 | 语法 |
|---|---|
| 声明 | int[][] arr; |
| 创建 | arr = new int[3][4]; |
| 初始化 | int[][] arr = {{1,2},{3,4}}; |
| 访问 | arr[i][j] |
| 行数 | arr.length |
| 列数 | arr[i].length |
多维数组要点:
- 本质是数组的数组
- 可以是不规则数组
- 使用双重循环遍历
- 注意空指针和越界异常
最后更新:2026-03-26