怎样按不同依据排序对象数组?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
对对象数组可调用 Arrays.sort(array, comparator),把排序依据写进不同的 Comparator。单字段可用 comparing 或 comparingInt,多字段用 thenComparing 串联。需要明确升降序、空值和相同键的处理;这与排序基本类型数组的重载不是一回事。
讲清原理
比较器把“对象怎样存储”与“这一次怎样排列”分开。同一批人员可以按年龄排,也可以按姓名排,不必为了每一种排列去修改类的自然顺序。
Arrays.sort 的对象排序有稳定性保证:按比较器相等的元素保留原相对顺序。不过稳定不代表业务上的唯一顺序;如果需要结果与输入顺序无关,就应继续补足比较字段。
例子与易错点
record Person(String name, int age) {}
Person[] people = {new Person("C", 20), new Person("A", 20), new Person("B", 18)};
var rule = java.util.Comparator.comparingInt(Person::age)
.thenComparing(Person::name);
java.util.Arrays.sort(people, rule);
for (Person p : people) System.out.print(p.name()); // BAC
sort 会修改这个数组的元素次序,若要保留原顺序,先复制外层数组再排。对象本身仍可能共享。不要用年龄相减充当比较器;倒序时也要分清是倒转整个规则,还是只倒转其中一个字段。
相关题:第 16 题、第 22 题、第 41 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。