java二维数组转置需新建n×m数组,将originali赋值给transposedj;仅适用于规则矩阵,空数组或不规则数组需特殊处理;广泛用于图像旋转、数据透视和矩阵运算。

Java二维数组转置,本质就是把原数组的第i行第transposed[j][i] = original[i][j]。这一步必须新建数组,不能原地修改;而且只对规则矩阵(每行长度一致)有明确定义。
明确新数组尺寸
原数组是 m 行 × n 列(比如 int[m][n]),转置后一定是 n 行 × m 列(即 int[n][m])。不能用 new int[m][n] 去存结果,否则下标越界或数据错位。
- 若原数组为空(
matrix == null || matrix.length == 0),直接返回null或空数组 - 若首行为空(
matrix[0] == null),需额外判空,避免NullPointerException - 不规则数组(如
{{1,2}, {3,4,5}})严格意义上无法转置;如需处理,得先补零或截断统一列长,但这已不是数学转置
用双层循环完成映射
核心逻辑简单:外层遍历原数组的行(i),内层遍历该行的列(j),每次把 original[i][j] 赋给 transposed[j][i]。
- 循环范围:外层
i从0到m−1,内层j从0到n−1 - 注意:不能写成
transposed[i][j] = original[j][i],那是索引没换过来 - 对于方阵(
m == n),有人用“上三角交换”优化(j从i+1开始),但通用场景推荐标准双循环,逻辑清晰不易出错
支持多种类型和结构
基础版常针对 int[][],但实际开发中常需泛型或集合适配:
-
double[][]、float[][]等基本类型数组,照搬逻辑,仅改类型声明 - 泛型
T[][]需借助Array.newInstance()创建新数组,因 Java 泛型擦除限制 -
List<list>></list>结构更灵活,可先转成二维数组再转置,或直接按行列索引重建嵌套列表
常见用途与注意事项
转置不只是数学练习,它在真实场景中承担具体角色:
- 图像处理:对像素二维网格转置,实现 90° 旋转(配合翻转)
- 数据透视:Excel 中“行列互换”功能底层就是这类操作
- 矩阵运算:乘法、协方差计算等都依赖转置作为前置步骤
- 性能提示:大矩阵建议用多线程分块处理,或考虑用
ByteBuffer优化内存访问局部性
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











