当前位置:首页 > Java

java 集合如何排序

2026-03-26 09:53:16Java

Java 集合排序方法

Java 提供了多种方式对集合进行排序,主要分为对 List 接口实现类的排序和对其他集合类型(如 SetMap)的排序。以下是常用的排序方法:

使用 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 的排序

SetMap 本身是无序的,但可以通过转换为 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 灵活排序

java 集合如何排序

List<Person> people = Arrays.asList(new Person("Alice", 25), new Person("Bob", 30));
people.sort(Comparator.comparingInt(p -> p.age)); // 按年龄排序

通过以上方法,可以灵活地对 Java 集合进行排序。

标签: java
分享给朋友:

相关文章

如何配置java环境

如何配置java环境

下载JDK安装包 访问Oracle官网或OpenJDK官网,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。下载完成后,运行安装程序并按照提示完成安装。 设置环境变量 右键…

如何自学java

如何自学java

选择合适的学习资源 从官方文档开始,Oracle提供的Java官方教程(Java Tutorials)是权威且免费的学习资料。在线平台如Codecademy、Coursera或Udemy提供互动式课程…

java如何创建类

java如何创建类

创建类的基本语法 在Java中,类通过class关键字定义,语法如下: [访问修饰符] class 类名 { // 成员变量(属性) // 构造方法 // 成员方法 }…

如何编译java

如何编译java

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证是否安装成功。若未安装,需从Oracl…

java如何入门

java如何入门

学习基础语法 从Java的基础语法开始,包括变量、数据类型、运算符、控制结构(if-else、for循环、while循环)等。可以通过官方文档或入门教程学习。 安装开发环境 下载并安装JDK(J…

java如何调用另一个类的方法

java如何调用另一个类的方法

调用另一个类的方法 在Java中调用另一个类的方法,通常需要创建该类的对象或直接通过类名调用(静态方法)。以下是几种常见的方式: 通过对象实例调用实例方法 创建一个目标类的对象,通过对象调用其方法。…