矩阵转置是将原二维数组的行索引与列索引互换,规则数组直接创建n×m新数组并按transposedj = originali赋值;不规则数组需按各列有效行数动态分配每行长度。

Java 中数组的行列转换(即矩阵转置)本质是将原二维数组的行索引与列索引互换:原来第 i 行第 j 列的元素,变成新数组中第 j 行第 i 列的元素。关键前提是原数组必须是规则二维数组(每行长度一致),否则需先处理不规则情况。
规则二维数组的直接转置
适用于 m×n 的矩形数组,结果为 n×m 数组。核心是新建目标数组,并按 transposed[j][i] = original[i][j] 赋值。
- 先获取原数组的行数
m = arr.length和列数n = arr[0].length - 创建新数组
int[][] transposed = new int[n][m] - 嵌套循环遍历:外层
i从 0 到 m−1(原行),内层j从 0 到 n−1(原列),执行transposed[j][i] = arr[i][j]
处理不规则二维数组(锯齿数组)
若各行长度不同(如 int[][] jagged = {{1,2}, {3,4,5}, {6}}),无法直接定义统一列数。需动态确定每行长度:
- 转置后行数 = 原数组最大列长(即最长行的元素个数)
- 转置后第
j行的长度 = 原数组中第j列非空的行数(即有多少行的长度 > j) - 遍历时需加判断:
if (j ,避免越界
使用 ArrayList 实现动态转置
当维度不确定或需频繁增删时,用 ArrayList<arraylist>></arraylist> 更灵活:
- 外层 list 存行,内层 list 存列值
- 遍历原数组,对每个
arr[i][j],向transposed.get(j).add(arr[i][j])添加(需提前确保transposed有足够行) - 适合稀疏或结构易变的场景,但性能略低于原始数组
注意边界与常见错误
转置操作容易出错的地方集中在索引和内存管理:
- 空数组或 null 检查:
if (arr == null || arr.length == 0)需提前返回 - 单行或单列数组也能转置(如
[[1,2,3]]→[[1],[2],[3]]),逻辑不变 - 不要在原数组上“就地转置”(除非是方阵且允许覆盖),否则会因读写冲突导致数据错乱
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











