237. Java 集合 - 对 List 元素进行排序

文章目录

  • [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 8List 接口中新增了 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(...))
相关推荐
迷藏4944 分钟前
**发散创新:基于角色与属性的混合权限模型在微服务架构中的实战落地**在现代分布式系统中,
java·python·微服务·云原生·架构
一个人旅程~11 分钟前
在M系列的macbook上如何使用VMware安装ARM版的Win11以及注意哪些问题?
linux·windows·经验分享·macos·电脑
码以致用13 分钟前
Java垃圾回收器笔记
java·jvm·笔记
暴力袋鼠哥15 分钟前
基于springboot与vue的ai多模态数据展示看板
java·spring boot
love530love18 分钟前
Windows 下 vcpkg 依赖环境部署与全局化配置
人工智能·windows·vcpkg
用户83071968408224 分钟前
VS Code Java开发配置与使用经验分享
java·visual studio code
立莹Sir27 分钟前
云原生全解析:从概念到实践,Java技术栈如何拥抱云原生时代
java·开发语言·云原生
程序员老邢38 分钟前
【技术底稿 12】内网统一日志系统 Loki + Promtail 全流程部署(对接 Grafana,监控日志一体化)
java·运维·程序人生·grafana·devops
银河系的一束光43 分钟前
使用 IntelliJ IDEA 开发 Java 程序时 , 会遇到以下中文乱码问题 :
java·ide·intellij-idea