java 中实现对象排序需要让类实现 comparable 接口并重写 compareto 方法,或者创建实现了 comparator 接口的比较器实例。通过调用 collections.sort() 或 list.sort() 并传入比较器,即可完成自定义排序逻辑。

如何定义一个基础的 Comparator 进行升序排序?
定义一个基础的 Comparator 只需实现 compare 方法,该方法接收两个参数并返回整数。若第一个参数小于第二个,返回负数;相等返回零;大于返回正数。使用 Integer.compare() 可简化数值比较逻辑。

import java.util.*;
public class Main {
public static void main(String[] args) {
List<integer> numbers = Arrays.asList(5, 2, 8, 1);
// 使用匿名内部类实现 Comparator
Comparator<integer> ascComparator = new Comparator<integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
};
Collections.sort(numbers, ascComparator);
System.out.println(numbers); // [1, 2, 5, 8]
}
}</integer></integer></integer>
如何使用 Lambda 表达式简化 Comparator 的编写?
Lambda 表达式可以大幅减少 Comparator 的代码量。由于 compare 是函数式接口,可以直接使用箭头语法。对于字符串排序,可直接引用 String.compareTo 方法,无需手动处理返回值。

import java.util.*;
public class Main {
public static void main(String[] args) {
List<string> names = Arrays.asList("Bob", "Alice", "Charlie");
// 使用 Lambda 简化 Comparator
Comparator<string> nameComparator = (s1, s2) -> s1.compareTo(s2);
Collections.sort(names, nameComparator);
System.out.println(names); // [Alice, Bob, Charlie]
}
}</string></string>
当 Comparator 返回 0 时,排序结果会怎样?
当 compare 方法返回 0 时,表示两个对象在排序意义上相等。稳定排序算法(如 Collections.sort 使用的 TimSort)会保持它们在原列表中的相对顺序。如果希望打破平局,需添加次要比较条件。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











