文章目录
- [237. Java 集合 - 对 List 元素进行排序](#237. Java 集合 - 对 List 元素进行排序)
- [🎯 为什么要排序?](#🎯 为什么要排序?)
- [📜 Java 7及之前的做法:使用 `Collections.sort()`](#📜 Java 7及之前的做法:使用
Collections.sort()) - [🚀 Java 8开始:直接使用 List 的 `sort()` 方法](#🚀 Java 8开始:直接使用 List 的
sort()方法) - [✨ 示例:不同排序方式的演示](#✨ 示例:不同排序方式的演示)
- [📚 补充知识点](#📚 补充知识点)
- [⚡ 小结](#⚡ 小结)
237. Java 集合 - 对 List 元素进行排序
🎯 为什么要排序?
List是一种有序集合,元素的插入顺序被记住。- 排序可以重新排列元素,使它们符合一定的规则(比如自然顺序或自定义顺序)。
- 为了方便排序,JDK 8 在
List接口中新增了sort()方法。
📜 Java 7及之前的做法:使用 Collections.sort()
在 Java SE 7 及之前,如果要排序一个 List,通常这样写:
java
import java.util.*;
public class SortOldWay {
public static void main(String[] args) {
List<String> names = new ArrayList<>(List.of("Charlie", "Alice", "Bob"));
Collections.sort(names); // 按自然顺序排序(字母顺序)
System.out.println(names); // [Alice, Bob, Charlie]
}
}
如果想自定义排序规则,需要传入一个 Comparator:
java
Collections.sort(names, Comparator.reverseOrder()); // 逆序排序
🚀 Java 8开始:直接使用 List 的 sort() 方法
从 Java 8 开始,你可以直接在 List 上调用 sort() 方法:
java
names.sort(Comparator.naturalOrder()); // 自然顺序
names.sort(Comparator.reverseOrder()); // 逆序
✨ 注意:
List.sort(Comparator)必须传入一个Comparator。- 如果你传入
null,默认使用元素自己的compareTo()方法(也就是元素必须实现Comparable接口)。 - 如果元素不支持比较 ,则会抛出
ClassCastException!
✨ 示例:不同排序方式的演示
java
import java.util.*;
public class SortExamples {
public static void main(String[] args) {
List<String> names = new ArrayList<>(List.of("Charlie", "Alice", "Bob"));
// 自然排序(默认字母升序)
names.sort(Comparator.naturalOrder());
System.out.println("Natural Order: " + names); // [Alice, Bob, Charlie]
// 逆序排序(字母降序)
names.sort(Comparator.reverseOrder());
System.out.println("Reverse Order: " + names); // [Charlie, Bob, Alice]
// 自定义排序:按字符串长度排序
names.sort(Comparator.comparingInt(String::length));
System.out.println("Sort by Length: " + names); // [Bob, Alice, Charlie]
}
}
🖨️ 输出:
java
Natural Order: [Alice, Bob, Charlie]
Reverse Order: [Charlie, Bob, Alice]
Sort by Length: [Bob, Alice, Charlie]
📚 补充知识点
| 问题 | 说明 |
|---|---|
| 什么是 Comparator? | 用来定义"两个对象如何比较大小"的规则。可以使用内置的,也可以自己编写。 |
| 什么是 Comparable? | 如果一个类自己知道怎么跟别的对象比较大小,就实现这个接口,比如 String、Integer。 |
为什么不推荐传 null? |
可读性差,容易出错。推荐使用 Comparator.naturalOrder() 替代传 null。 |
⚡ 小结
✅ Java 7 及之前使用 Collections.sort(list, comparator)
✅ Java 8 及之后可以直接使用 list.sort(comparator),更简洁
🚀 推荐:
- 排自然顺序:
list.sort(Comparator.naturalOrder()) - 排逆序:
list.sort(Comparator.reverseOrder()) - 自定义规则排序:
list.sort(Comparator.comparing(...))