当前位置:首页 > 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() 可以对集合进行排序并生成新的排序后的集合。

java 集合如何排序

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 自动排序

java 集合如何排序

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 集合进行排序。

标签: java
分享给朋友:

相关文章

java如何安装

java如何安装

安装Java的步骤 下载Java开发工具包(JDK) 访问Oracle官方网站或OpenJDK项目页面下载适合操作系统的JDK版本。Oracle JDK适用于商业用途,OpenJDK是开源版本。选择…

如何删除java

如何删除java

卸载 Java 的步骤 Windows 系统: 打开控制面板,选择“程序和功能”或“卸载程序”,在列表中找到 Java 相关条目(如“Java Runtime Environment”或“Java D…

java如何输入数据

java如何输入数据

输入数据的方法 在Java中,输入数据可以通过多种方式实现,具体取决于输入来源(如控制台、文件、网络等)。以下是几种常见的方法: 使用Scanner类从控制台输入 Scanner类是Java中最常用…

java如何创建数组

java如何创建数组

创建数组的基本方法 在Java中,数组是固定大小的同类型元素集合。创建数组需要声明数组类型并初始化。 声明数组 语法格式为 数据类型[] 数组名 或 数据类型 数组名[]: int[] arr1;…

java如何生成随机数

java如何生成随机数

生成随机数的方法 在Java中生成随机数可以通过多种方式实现,以下是几种常见的方法: 使用Math.random()方法 Math.random()方法返回一个double类型的伪随机数,范围在[0…

eclipse如何创建java

eclipse如何创建java

在Eclipse中创建Java项目 打开Eclipse后,选择菜单栏中的"File" -> "New" -> "Java Project"。在弹出的对话框中输入项目名称,确保"Use de…