Java 中使用 sort() 方法排序:从基本原理到多种用法全面总结;sort()函数的使用_java中sort排序函数用法

本文深入解析Java编程中sort()函数的原理和应用,包括默认升序排序、局部排序、降序排序(逆序排序)以及自定义对象排序。详细介绍了使用Collections.reverseOrder()、Comparator.reversed()、匿名内部类和Lambda表达式进行降序排序的方法。此外,还涵盖了Lambda简化Comparator实现和多级排序、并行排序的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.1 默认排序(升序)

2.2 局部排序

2.2 降序排序(逆序排序)

2.2.1 使用Collections.reverseOrder()方法进行逆序排序

2.2.2 使用Comparator.reversed()方法

2.2.3 匿名内部类

2.2.4 使用Lambda表达式进行逆序排序

2.3 自定义对象进行排序

2.4 Lambda 表达式简化Comparator的实现

2.4.1 基本的Lambda表达式

2.4.2 省略类型定义:

2.4.3 使用静态方法引用:

2.4.4 使用实例方法引用:

2.5 多级排序

2.6 并行排序



在 Java 编程中,sort() 函数是一个非常重要且常用的方法,用于对数组或集合进行排序操作。本文将深入探讨 sort() 函数的基本原理、以及其在实际应用中的多种用法。

1. sort() 函数的基本原理

Java中的sort()函数是一个高效的排序算法,其具体的实现原理取决于排序的数据类型和大小。在Java 7之前,Arrays类使用的是经典的快速排序算法。在Java 7及以后的版本中,Arrays类在排序小型数组时使用的是改进后的快速排序算法,而在排序大型数组时使用的是归并排序算法。

原理详情请看往期:http://t.csdnimg.cn/Lqw93

2. sort() 函数的用法

在 Java 中,sort() 函数可以用于对数组或集合进行排序,其用法略有不同。

2.1 默认排序(升序)

格式:

Arrays.sort(array);
Collections.sort(list);

例:

//对整型数组进行排序
int[] array = {5, 2, 9, 1, 3};
Arrays.sort(array);
System.out.println(Arrays.toString(array)); //输出:[1, 2, 3, 5, 9]
​
//对字符串数组进行排序
String[] names = {"John", "Alice", "Bob", "David"};
Arrays.sort(names);
System.out.println(Arrays.toString(names)); //输出:[Alice, Bob, David, John]
​
// 对列表进行排序
List<Integer> list = new ArrayList<>();
list.add(5);
list.add(2);
list.add(9);
list.add(1);
list.add(3);
Collections.sort(list);
System.out.println(list); // 输出:[1, 2, 3, 5, 9]

2.2 局部排序

格式:

Arrays.sort(数组名,start,end);//注意左闭右开!!![start,end)

例:

int[] array = {5, 2, 9, 1, 3};
//对数组的一部分内容进行排序(索引从1到3,包括1不包括3)
Arrays.sort(array, 1, 3);
System.out.println(Arrays.toString(array)); //输出:[5, 1, 2, 9, 3]

2.2 降序排序(逆序排序)

有时我们需要对数组或集合进行倒序排序,可以通过自定义比较器实现:

2.2.1 使用Collections.reverseOrder()方法进行逆序排序
//数组:
Integer[] arr = {3, 1, 4, 1, 5, 9};
Arrays.sort(arr, Collections.reverseOrder());// 输出:[9, 5, 4, 3, 1, 1]

Collections.sort(list, nameComparator.reversed());

//集合:
List<Integer> list = Arrays.asList(3, 1, 4, 1, 5, 9);
Collections.sort(list, Collections.reverseOrder());
System.out.println(list);  // 输出:[9, 5, 4, 3, 1, 1]
2.2.2 使用Comparator.reversed()方法
List<Student> list = Student.getStudentList();
Comparator<Student> nameComparator = (s1, s2) -> s1.getName().compareTo(s2.getName());
Collections.sort(list, nameComparator.reversed());
2.2.3 匿名内部类
Integer[] arr = {8, 9, 5, 2, 3, 6, 1, 0, 7, 4};
Arrays.sort(arr, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1 - o2;
    }
});
2.2.4 使用Lambda表达式进行逆序排序
Integer[] arr = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
Arrays.sort(arr, (o1, o2) -> o2 - o1);

2.3 自定义对象进行排序

//数组自定义对象排序
Person[] people = {new Person("Alice", 25), new Person("Bob", 20), new Person("Charlie", 30)};
Comparator<Person> byName = Comparator.comparing(Person::getName);//注:Person 类中需有getName()方法
Arrays.sort(people, byName); //按照姓名排序
​
// 集合自定义对象排序
List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 25));
persons.add(new Person("Bob", 30));
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/2dce2602fc5225e41ecda62e22955aa5.png)

 

![img](https://img-blog.csdnimg.cn/img_convert/d2b6815286699eee0e51c857d3a8fd85.png)

![img](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)

![img](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

9f49b566129f47b8a67243c1008edf79.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

<img src="https://img-community.csdnimg.cn/images/fd6ebf0d450a4dbea7428752dc7ffd34.jpg" alt="img" style="zoom:50%;" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值