java 集合如何排序
Java 集合排序方法
Java 提供了多种方式对集合进行排序,主要分为对 List 接口实现类的排序和对其他集合类型(如 Set、Map)的排序。以下是常用的排序方法:
使用 Collections.sort() 对 List 排序
Collections.sort() 是专门为 List 设计的排序方法,支持自然排序和自定义排序。
自然排序(元素需实现 Comparable 接口)
List<Integer> numbers = Arrays.asList(5, 3, 8, 1);
Collections.sort(numbers); // 升序排序
System.out.println(numbers); // 输出 [1, 3, 5, 8]
自定义排序(通过 Comparator)
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Collections.sort(names, (a, b) -> b.compareTo(a)); // 降序排序
System.out.println(names); // 输出 ["Charlie", "Bob", "Alice"]
使用 List.sort() 方法
Java 8 开始,List 接口新增了 sort() 方法,可直接调用。
List<Integer> numbers = Arrays.asList(5, 3, 8, 1);
numbers.sort(Comparator.naturalOrder()); // 升序
System.out.println(numbers); // 输出 [1, 3, 5, 8]
numbers.sort(Comparator.reverseOrder()); // 降序
System.out.println(numbers); // 输出 [8, 5, 3, 1]
使用 Stream API 排序
通过 Stream.sorted() 可以对集合进行排序并生成新的排序后的集合。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> sortedNames = names.stream()
.sorted() // 自然排序
.toList();
System.out.println(sortedNames); // 输出 ["Alice", "Bob", "Charlie"]
List<String> reverseSortedNames = names.stream()
.sorted(Comparator.reverseOrder()) // 降序
.toList();
System.out.println(reverseSortedNames); // 输出 ["Charlie", "Bob", "Alice"]
对 Set 和 Map 的排序
Set 和 Map 本身是无序的,但可以通过转换为 List 或使用 TreeSet/TreeMap 实现排序。
将 Set 转为 List 后排序
Set<Integer> numbers = new HashSet<>(Arrays.asList(5, 3, 8, 1));
List<Integer> sortedList = new ArrayList<>(numbers);
Collections.sort(sortedList);
System.out.println(sortedList); // 输出 [1, 3, 5, 8]
使用 TreeSet 自动排序

Set<Integer> numbers = new TreeSet<>(Arrays.asList(5, 3, 8, 1));
System.out.println(numbers); // 输出 [1, 3, 5, 8]
对 Map 按键或值排序
Map<String, Integer> map = Map.of("Alice", 25, "Bob", 30, "Charlie", 20);
// 按键排序
List<Map.Entry<String, Integer>> sortedByKey = new ArrayList<>(map.entrySet());
sortedByKey.sort(Map.Entry.comparingByKey());
System.out.println(sortedByKey); // 输出 [Alice=25, Bob=30, Charlie=20]
// 按值排序
List<Map.Entry<String, Integer>> sortedByValue = new ArrayList<>(map.entrySet());
sortedByValue.sort(Map.Entry.comparingByValue());
System.out.println(sortedByValue); // 输出 [Charlie=20, Alice=25, Bob=30]
自定义对象排序
如果需要对自定义对象排序,需实现 Comparable 接口或传入 Comparator。
实现 Comparable 接口
class Person implements Comparable<Person> {
String name;
int age;
@Override
public int compareTo(Person other) {
return this.name.compareTo(other.name); // 按姓名排序
}
}
List<Person> people = Arrays.asList(new Person("Alice", 25), new Person("Bob", 30));
Collections.sort(people);
使用 Comparator 灵活排序
List<Person> people = Arrays.asList(new Person("Alice", 25), new Person("Bob", 30));
people.sort(Comparator.comparingInt(p -> p.age)); // 按年龄排序
通过以上方法,可以灵活地对 Java 集合进行排序。






