Java对象数组排序需实现Comparable接口或传入Comparator,支持自然排序、定制排序及多条件链式排序,注意null处理、类型安全和基本类型与包装类的区别。

Java 中对对象数组排序,核心是让对象可比较,Arrays.sort() 才能按需排列。它不关心具体业务含义,只依赖你提供的比较规则。
对象必须实现 Comparable 接口(自然排序)
如果类本身有明确的“默认大小关系”,比如 Student 按学号排序,就让类实现 Comparable<student></student>,重写 compareTo() 方法:
-
return this.id - o.id;(适用于 int 类型且不会溢出) -
return Integer.compare(this.id, o.id);(更安全,推荐) - 字符串字段用
this.name.compareTo(o.name) - 多字段组合:先比主字段,相等再比次字段,例如
int c = this.grade - o.grade; return c != 0 ? c : this.name.compareTo(o.name);
临时定义排序规则:使用 Comparator(定制排序)
不想改原类、或一次需要多种排序方式时,传入 Comparator 实例即可。支持 lambda 表达式,简洁直观:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 按年龄降序:
Arrays.sort(students, (a, b) -> b.age - a.age); - 按姓名长度升序:
Arrays.sort(students, (a, b) -> Integer.compare(a.name.length(), b.name.length())); - 多条件链式写法(Java 8+):
Arrays.sort(students, Comparator.comparing(s -> s.grade).reversed().thenComparing(s -> s.name));
注意 null 值和类型安全
Arrays.sort() 默认不处理 null 元素,遇到会抛 NullPointerException:
立即学习“Java免费学习笔记(深入)”;
- 提前过滤:用
Stream筛选非 null 再转回数组 - 在
Comparator中显式处理:Comparator.nullsFirst(Comparator.comparing(...))或nullsLast - 确保比较字段类型一致,避免运行时
ClassCastException;泛型声明如Student[] students能在编译期减少错误
基本类型数组与对象数组不能混用
Arrays.sort() 有多个重载方法,但它们互不兼容:
-
int[]用Arrays.sort(int[])(优化过的快排/双轴快排) -
Integer[]用Arrays.sort(Object[])(基于 TimSort 的稳定排序) - 误把
int[]传给Object[]版本会编译失败;反之则可能隐式装箱,影响性能

















