深入浅出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

[特殊字符]颠覆MCP!Open WebUI新技术mcpo横空出世!支持ollama!轻松支持各种MCP Server!Cline+Claude3.7轻松开发论文检索MCP Server!

[特殊字符]颠覆MCP!Open WebUI新技术mcpo横空出世!支持ollama!轻松支持各种MCP Server!Cline+Claude3.7轻松开发论文检索MCP Server!

🔥🔥🔥本篇笔记所对应的视频:🚀颠覆MCP!Open WebUI新技术mcpo横空出世!支持ollama!轻松支持各种MCP Server!Cline+Claude3.7轻松开发MCP服务_哔哩哔哩_bilibili Open WebUI 的 MCPo 项目:将 MCP 工具无缝集成到 OpenAPI 的创新解决方案 随着人工智能工具和模型的快速发展,如何高效、安全地将这些工具集成到标准化的 API 接口中成为了开发者面临的重要挑战。Open WebUI 的 MCPo 项目(Model Context Protocol-to-OpenAPI Proxy Server)正是为了解决这一问题而设计的。本文将带您深入了解 MCPo 的功能、优势及其对开发者生态的影响。 什么是 MCPo? MCPo 是一个简单、可靠的代理服务器,能够将任何基于 MCP 协议的工具转换为兼容

By Ne0inhk
Qwen3+Qwen Agent 智能体开发实战,打开大模型MCP工具新方式!(一)

Qwen3+Qwen Agent 智能体开发实战,打开大模型MCP工具新方式!(一)

系列文章目录 一、Qwen3+Qwen Agent 智能体开发实战,打开大模型MCP工具新方式!(一) 二、Qwen3+Qwen Agent +MCP智能体开发实战(二)—10分钟打造"MiniManus" 前言 要说最近人工智能界最火热的开源大模型,必定是阿里发布不久的Qwen3系列模型。Qwen3模型凭借赶超DeepSeek-V3/R1的优异性能,创新的混合推理模式,以及极强的MCP能力迅速成为AI Agent开发的主流基座模型。大家可参考我的文章一文解析Qwen3大模型详细了解Qwen3模型的核心能力。有读者私信我: “Qwen3官网特地强调增强了Agent和代码能力,同时加强了对MCP的支持,那么我该如何利用Qwen3快速开发MCP应用呢?” 这就就需要使用我们今天的主角——Qwen官方推荐的开发工具Qwen-Agent ,本期分享我们就一起学习快速使用Qwen3+QwenAgent 接入MCP服务端,快速开发AI Agent应用! 一、注册 Qwen3 API-Key 本次分享通过阿里云百炼大模型服务平台API Key请求方式调用Qwen3大模型,获取服务平台

By Ne0inhk