在Java里如何编写简单排序程序_Java算法基础项目说明

发布时间 - 2026-01-28 00:00:00    点击率:
Java排序应优先用Arrays.sort()处理数组、Collections.sort()处理List,自定义规则用Comparator;手写冒泡仅限教学;需注意null值处理和基本类型降序限制。

Java里写简单排序程序,核心不是“选哪个算法”,而是“根据场景选对实现方式”——数组排序用 Arrays.sort(),集合排序用 Collections.sort(),自定义规则就补 Comparator,硬要手写才碰冒泡或快排。

Arrays.sort() 排基本类型和字符串数组

这是最常用、最稳的选择。它对 int[]double[]String[] 等内置类型做了高度优化,底层混合了双轴快排(基本类型)和 TimSort(对象数组),性能和稳定性都远超手写。

常见错误是传错类型:比如把 List 直接丢给 Arrays.sort(),会报 Cannot resolve method 'sort(java.util.List)' ——因为这个方法只认数组。

  • int[] nums = {3, 1, 4, 1, 5}; Arrays.sort(nums); → 升序完成
  • String[] words = {"banana", "apple", "cherry"}; Arrays.sort(words); → 按字典序升序
  • 降序?基本类型不支持直接降序,得转成包装类数组再用 Comparator.reverseOrder()

Collections.sort()List 并自定义顺序

当你手里是 ArrayListLinkedList,别转数组再排,直接用 Collections.sort()。它要求元素实现 Comparable,否则必须显式传 Comparator

容易踩的坑是误用匿名内部类写法导致语法臃肿,Java 8+ 强烈推荐用 Lambda:

  • List list = Arrays.asList(3, 1, 4); Collect

    ions.sort(list);
    → 默认升序
  • Collections.sort(list, (a, b) -> b - a); → 降序(注意整数溢出风险,更安全用 Integer.compare(b, a)
  • Collections.sort(list, Comparator.reverseOrder()); → 同样降序,语义清晰

手写冒泡排序只适合教学或极特殊约束场景

真在生产代码里写冒泡,除非面试被要求、或嵌入式环境连 java.util 都不让用。它时间复杂度 O(n²),1000 个元素就要百万级比较,而 Arrays.sort() 对 1000 个 int 通常不到 1ms。

如果非写不可,注意边界判断和提前退出逻辑,否则纯浪费 CPU:

public static void bubbleSort(int[] arr) {
    int n = arr.length;
    for (int i = 0; i < n - 1; i++) {
        boolean swapped = false;
        for (int j = 0; j < n - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                swapped = true;
            }
        }
        if (!swapped) break; // 没交换说明已有序,直接退出
    }
}

排序稳定性与 null 值处理是实际项目里的暗礁

Arrays.sort() 对对象数组(如 String[])是稳定排序,相同元素相对位置不变;但对 int[] 这种基本类型,“稳定”无意义。而 Collections.sort() 默认也稳定。

真正容易崩的是 null 值——Arrays.sort(new String[]{"a", null, "b"}) 直接抛 NullPointerException。解决办法只有两个:

  • 预处理:用 list.removeIf(Objects::isNull) 或过滤流 .filter(Objects::nonNull)
  • 自定义 Comparator 显式约定 null 排前面还是后面,例如:Comparator.nullsFirst(String::compareTo)

没处理 null 的排序代码,在测试数据干净时跑得飞起,一进真实环境就挂,这种问题往往拖到上线后才暴露。


# word  # java  # seo  # app  # apple  # 字符串数组  # 冒泡排序  # String  # Integer  # NULL  # sort  # Filter  # 字符串  # int  # double  # Lambda  # 对象  # 算法  # 自定义  # 升序  # 降序  # 会报  # 飞起  # 的是  # 这是  # 当你  # 不支持  # 再用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Python文件异常处理策略_健壮性说明【指导】  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  如何自定义建站之星网站的导航菜单样式?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  如何在万网开始建站?分步指南解析  常州企业网站制作公司,全国继续教育网怎么登录?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Bootstrap整体框架之CSS12栅格系统  在Oracle关闭情况下如何修改spfile的参数  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  黑客如何通过漏洞一步步攻陷网站服务器?  Java遍历集合的三种方式  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  javascript日期怎么处理_如何格式化输出  零基础网站服务器架设实战:轻量应用与域名解析配置指南  javascript如何操作浏览器历史记录_怎样实现无刷新导航  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Laravel如何与Inertia.js和Vue/React构建现代单页应用  英语简历制作免费网站推荐,如何将简历翻译成英文?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Internet Explorer官网直接进入 IE浏览器在线体验版网址  jQuery validate插件功能与用法详解  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何在云主机上快速搭建多站点网站?  如何在万网自助建站平台快速创建网站?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  如何续费美橙建站之星域名及服务?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  北京专业网站制作设计师招聘,北京白云观官方网站?  香港服务器如何优化才能显著提升网站加载速度?  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  python中快速进行多个字符替换的方法小结  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】