arraylist可通过collections.sort()或list.sort()配合comparator排序自定义对象;支持lambda表达式、匿名内部类、独立比较器类及comparable接口实现;可链式组合多字段排序并支持逆序。

在 Java 中,ArrayList 本身不直接支持自定义比较器,但你可以通过 Collections.sort() 或 list.sort() 方法配合自定义 Comparator 对其中的自定义对象进行排序。
使用 Lambda 表达式(推荐,简洁)
假设你有一个 Person 类,想按年龄升序排序:
ArrayList<person> list = new ArrayList();
list.add(new Person("Alice", 30));
list.add(new Person("Bob", 25));
list.sort((p1, p2) -> Integer.compare(p1.getAge(), p2.getAge()));
// 或更简写(前提是 getAge() 返回 int)
list.sort(Comparator.comparingInt(Person::getAge));
</person>
实现 Comparator 接口(适合复用或逻辑复杂时)
单独定义一个比较器类或匿名内部类:
// 匿名内部类方式
Collections.sort(list, new Comparator<person>() {
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(p1.getAge(), p2.getAge());
}
});
// 或者定义独立类
public class PersonAgeComparator implements Comparator<person> {
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(p1.getAge(), p2.getAge());
}
}
// 使用:
Collections.sort(list, new PersonAgeComparator());
</person></person>
让对象自身实现 Comparable(适用于自然排序)
如果“按年龄排序”就是该类的默认排序逻辑,可以让 Person 实现 Comparable:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
public class Person implements Comparable<person> {
private String name;
private int age;
// 构造、getter 省略...
@Override
public int compareTo(Person other) {
return Integer.compare(this.age, other.age);
}
}
// 此时可直接调用:
Collections.sort(list); // 或 list.sort(null)
</person>
多字段组合排序(例如先按年龄,年龄相同时按姓名)
利用 Comparator 的链式方法:
list.sort(Comparator.comparingInt(Person::getAge)
.thenComparing(Person::getName));
也支持逆序:.reversed(),或对某字段单独逆序:Comparator.comparing(Person::getName).reversed()。
注意:自定义比较器只影响排序行为,不影响 ArrayList 的增删查等其他操作;确保比较逻辑满足自反性、对称性、传递性,否则排序结果不可靠。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










