java二维数组转置需新建n×m数组,将originali赋值给transposedj,空数组或首行为null需特殊处理,仅规则矩阵可转置。

Java 中规则二维数组的行与列交换(即转置),本质是把第 i 行第 j 列的元素,放到新数组的第 j 行第 i 列位置。它不是“翻转画面”,而是数学意义上的坐标映射,必须新建数组,不能原地修改。
明确新数组维度关系
原数组是 m 行 × n 列(如 int[m][n]),转置后一定是 n 行 × m 列(即 int[n][m])。常见错误是误用 new int[m][n] 作结果数组——这会导致下标越界或数据错位。例如原数组为 {{1,2,3},{4,5,6}}(2×3),转置后应为 3×2 数组,而非保持 2×3。
- 若原数组为空(
matrix == null || matrix.length == 0),直接返回null或对应尺寸的空数组(如new int[0][n]) - 若首行为
null(matrix[0] == null),需提前判空,否则调用length会抛NullPointerException
用双层循环完成坐标映射
核心语句只有一行:transposed[j][i] = original[i][j]。外层遍历行(i 从 0 到 m−1),内层遍历列(j 从 0 到 n−1)。注意不是 transposed[i][j] = original[j][i]——那是索引没换过来,逻辑全错。
- 对非方阵(
m ≠ n),必须用标准双循环,不可省略任意下标范围 - 对方阵(
m == n),可用“上三角交换”优化(j从i+1开始),但易出错且不通用,初学建议统一用标准写法
只适用于规则矩阵
Java 二维数组允许每行长度不同(如 {{1,2}, {3,4,5}}),但这不是数学定义下的“矩阵”,严格意义上无法转置。因为列数不统一,original[i][j] 在某行可能越界。
- 若业务中需处理不规则数组,必须先归一化:取最长行长度,缺失位置补默认值(如 0 或
null) - 这种补零/截断后的操作属于自定义变换,不是真正的转置,也不满足
(A^T)^T = A等代数性质
典型代码结构示例
以下是最简、健壮、可读性强的实现方式:
public static int[][] transpose(int[][] matrix) {
if (matrix == null || matrix.length == 0) return new int[0][0];
if (matrix[0] == null) return new int[0][matrix.length];
int m = matrix.length;
int n = matrix[0].length;
int[][] transposed = new int[n][m];
for (int i = 0; i
<p>该写法覆盖空数组、单行、单列等边界情况,不依赖方阵假设,适配所有规则二维数组。</p>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











