java二维数组排序需据目标选择方法:按行独立升序用遍历+arrays.sort();按列重排行用arrays.sort()配合comparator;全局升序则先扁平化再排序回填。

Java 中二维数组排序不是直接调用 Arrays.sort() 就能完成的,因为该方法只支持一维数组。实际操作必须明确目标:是让每行内部有序?还是按某列整体重排行?或是让全部元素全局升序铺满原结构?不同目标对应完全不同的实现路径。
按行独立升序排序(每行各自排)
这是最常用也最简单的场景,比如处理学生成绩表,希望每人的各科成绩从小到大排列,但不改变学生顺序。
- 直接遍历每一行,对
int[]类型的行调用Arrays.sort() - 注意:
matrix[i]就是一维数组,类型匹配,不能传错成整数或整个二维数组 - 代码示例:
for (int i = 0; i
按指定列整体排序(重排所有行)
适用于记录式数据,例如按“总分”列从高到低排列学生整行信息,行与行之间相对位置会变动。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 必须自定义
Comparator<int></int>,比较逻辑聚焦在目标列索引上 - 多级排序(如总分相同再按学号)可在 compare 方法中链式判断
- 示例(按第 1 列升序):
Arrays.sort(matrix, (a, b) -> Integer.compare(a[1], b[1]));
全局升序铺满二维结构(扁平化排序)
当需求是“整个矩阵所有数字从小到大排列,保持行列数不变”,比如生成有序测试数据或图像像素重排。
- 先将二维数组展平为一维数组,长度为
rows × cols - 用
Arrays.sort()排序后,按行优先顺序重新填回原二维数组 - 避免手写四重循环冒泡——那种写法逻辑混乱、易重复交换、结果不可靠
常见错误提醒
新手容易踩坑的地方:
- 把
int m(行数)误当作二维数组传给printMat(m, n),编译报错incompatible types - 用嵌套四重循环暴力比较
matrix[i][j] > matrix[k][l]并交换——这不是冒泡,是无序覆盖,结果不稳定 - 忽略空行或不规则二维数组(各行长度不同),未加
if (matrix[i] != null)防护
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










