深入浅出Java排序:从基础算法到实战优化(下)

深入浅出Java排序:从基础算法到实战优化(下)
在这里插入图片描述

文章目录


  • 书接上回,在从基础算法到实战优化上咱们较为详细的讨论了数据结构中常见的八大排序.今天咱们来介绍一下java自带的.sort方法.

一、核心概念与底层实现

Java的排序方法遵循最佳实践,底层根据数据类型做了优化:

  • intlong基本类型数组:使用双轴快速排序(Dual-Pivot QuickSort),效率更高(时间复杂度O(n log n))。
  • String、自定义对象等引用类型:使用TimSort(归并排序+插入排序的混合算法),稳定且高效。

二、常用.sort方法用法

1. Arrays.sort()(数组排序)

适用于所有数组类型(基本类型、引用类型),默认升序排列。

示例1:基本类型数组排序(int数组)

importjava.util.Arrays;publicclassSortDemo{publicstaticvoidmain(String[] args){// 定义无序int数组int[] nums ={5,2,9,1,5,6};// 核心:数组排序(原地排序,直接修改原数组)Arrays.sort(nums);// 输出结果:[1, 2, 5, 5, 6, 9]System.out.println(Arrays.toString(nums));}}

示例2:自定义对象数组排序(实现Comparable)
如果要排序自定义对象,需让对象类实现Comparable接口,重写compareTo方法定义“自然排序规则”。

importjava.util.Arrays;// 自定义User类,实现Comparable接口classUserimplementsComparable<User>{privateString name;privateint age;publicUser(String name,int age){this.name = name;this.age = age;}// 定义排序规则:按年龄升序(this.age - o.age),降序则反过来@OverridepublicintcompareTo(User o){returnthis.age - o.age;}// 重写toString,方便打印@OverridepublicStringtoString(){return"User{name='"+ name +"', age="+ age +"}";}}publicclassObjectSortDemo{publicstaticvoidmain(String[] args){User[] users ={newUser("张三",25),newUser("李四",20),newUser("王五",30)};// 排序自定义对象数组Arrays.sort(users);// 输出结果:按年龄升序排列// [User{name='李四', age=20}, User{name='张三', age=25}, User{name='王五', age=30}]System.out.println(Arrays.toString(users));}}

示例3:自定义排序规则(Comparator)
如果不想修改对象类(比如第三方类),或需要临时自定义排序规则,可使用带Comparator的重载方法:

importjava.util.Arrays;importjava.util.Comparator;publicclassComparatorSortDemo{publicstaticvoidmain(String[] args){String[] strs ={"apple","Banana","cherry","date"};// 按字符串长度降序排序(忽略大小写)Arrays.sort(strs,newComparator<String>(){@Overridepublicintcompare(String s1,String s2){// 降序:s2长度 - s1长度int lenCompare = s2.length()- s1.length();// 长度相同则按字母序(忽略大小写)return lenCompare !=0? lenCompare : s1.compareToIgnoreCase(s2);}});// 输出:[cherry, Banana, apple, date]System.out.println(Arrays.toString(strs));}}
2. Collections.sort()(List集合排序)

专门用于List接口的实现类(如ArrayListLinkedList),用法和Arrays.sort()类似,默认升序。

示例:List集合排序(Lambda简化Comparator)
Java 8+支持Lambda表达式,可简化Comparator的写法:

importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;publicclassListSortDemo{publicstaticvoidmain(String[] args){List<Integer> list =newArrayList<>(); list.add(8); list.add(2); list.add(7); list.add(1);// 方式1:默认升序Collections.sort(list);System.out.println("升序:"+ list);// [1, 2, 7, 8]// 方式2:Lambda自定义降序Collections.sort(list,(a, b)-> b - a);System.out.println("降序:"+ list);// [8, 7, 2, 1]}}

三、关键注意事项

  1. Arrays.sort()原地排序:直接修改原数组,不会返回新数组;
  2. 基本类型数组的排序是不稳定的,引用类型排序是稳定的;

Java 8+还提供了List.sort()方法(替代Collections.sort()),写法更简洁:

list.sort((a, b)-> b - a);// 等价于Collections.sort(list, ...)

总结

  1. Java的.sort核心分为Arrays.sort()(数组)和Collections.sort()(List),底层优化保证高性能;
  2. 排序规则分两种:实现Comparable定义“自然排序”,或传入Comparator实现“定制排序”;
  3. Java 8+推荐用Lambda简化Comparator,List.sort()替代Collections.sort()更简洁。

上面就是.sort的一些基本的用法,我是Dylan ,下期见~

Read more

Grok 4.2 重磅来袭!xAI 最新 AI 模型功能全解析(2026 年 2 月版)

Grok 4.2 重磅来袭!xAI 最新 AI 模型功能全解析(2026 年 2 月版)

Grok 4.2 重磅来袭!xAI 最新 AI 模型功能全解析(2026 年 2 月版) 2026 年 2 月 17 日,xAI 创始人埃隆·马斯克在 X 上宣布:Grok 4.2 发布候选版(公测)正式上线!用户现在可以直接访问国内高速镜像站手动切换到 Grok 4.2 即可体验。这款模型最大的亮点在于“快速学习能力”——不同于以往版本,它能每周持续迭代,附带详细发布笔记,真正实现了“边用边进化”。 d3i6fh83elv35t.cloudfront.net 1. 核心升级:每周进化 + 多代理协作系统 Grok 4.

By Ne0inhk
打造你的家庭 AI 助手(四):单 OpenClaw 配置多 Agent、多 QQ、飞书机器人

打造你的家庭 AI 助手(四):单 OpenClaw 配置多 Agent、多 QQ、飞书机器人

打造你的家庭 AI 助手(四):单 OpenClaw 配置多 Agent、多 QQ、飞书机器人 引言 OpenClaw 是一个强大的智能体(Agent)编排框架,它通过统一的架构让开发者可以轻松管理多个聊天机器人,并接入不同的即时通讯平台。在实际应用中,我们往往需要同时运行多个 QQ 机器人(例如个人助手、工作助手),甚至希望同一个智能体既能处理 QQ 消息,也能响应飞书消息。 本文将详细介绍如何在一个 OpenClaw 实例中配置多通道(QQ、飞书)、多 Agent 以及多 QQ 机器人账号,实现资源的高效利用和灵活的消息路由。特别地,我们将阐明飞书通道与 QQ 通道在绑定规则上的差异,避免常见的配置错误。 核心概念回顾 * Agent(智能体):拥有独立人格、记忆和技能的对话单元。每个

By Ne0inhk
AI实践(2)提示词工程

AI实践(2)提示词工程

AI实践(2)提示词工程 Author: Once Day Date: 2026年3月2日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: AI实践成长_Once-Day的博客-ZEEKLOG博客 参考文章:Documentation - Claude API DocsOpenAI for developersPrompt Engineering GuidePrompt Engineering Guide: The Ultimate Guide to Generative AI提示词技巧 – Claude 中文 - Claude AI 开发技术社区Prompting strategies for financial analysis | ClaudeGPT-5 prompting guidePrompt engineering | OpenAI APIPrompting

By Ne0inhk
免费开源AI工具:CoPaw与OpenFang整理

免费开源AI工具:CoPaw与OpenFang整理

CoPaw 和 OpenFang,两者软件本体都免费开源,但模型 API 可能产生费用。 CoPaw(阿里云) * 软件本身:完全免费开源(Apache 2.0),无会员、无广告、无功能限制 * 本地部署:免费,仅需 Python 环境,可跑本地模型(Ollama 等),零 API 费用 * 云端部署:魔搭创空间有免费测试额度;长期使用按云资源(CPU/GPU/ 存储)计费 * 模型 API:调用通义千问、OpenAI、DeepSeek 等按官方标准按量付费  CoPaw GitHub 地址 https://github.com/agentscope-ai/CoPaw OpenFang(

By Ne0inhk