数组的排序
排序是指将数组元素按照从大到小或从小到大的顺序重新排列。
Arrays.sort() 方法
Java 提供了 Arrays.sort() 方法,可以对数组进行升序(从小到大)排序,位于 java.util.Arrays 类中。
import java.util.Arrays;
Integer[] a = {1, 24, 56, 78, 76, 342, 65, 4};
Arrays.sort(a);Code language: JavaScript (javascript)
排序后数组 a 变为:
[1, 4, 24, 56, 65, 76, 78, 342]Code language: JSON / JSON with Comments (json)
示例代码
import java.util.Arrays;
import java.util.List;
public static void main(String[] args) {
Integer[] a = {1, 24, 56, 78, 76, 342, 65, 4};
Arrays.sort(a);
// 转为 List 查看(可选)
List<Integer> asList = Arrays.asList(a);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}Code language: JavaScript (javascript)
输出结果:
1
4
24
56
65
76
78
342
注意:原文代码中遍历从
i = 1开始,会跳过第一个元素。建议从i = 0开始以输出全部元素。
降序排序
Arrays.sort() 默认只能升序。如需降序,可以使用 Collections.reverseOrder()(适用于对象类型数组):
import java.util.Arrays;
import java.util.Collections;
Integer[] a = {1, 24, 56, 78, 76, 342, 65, 4};
Arrays.sort(a, Collections.reverseOrder());
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}Code language: JavaScript (javascript)
输出:
342
78
76
65
56
24
4
1
注意:
Collections.reverseOrder()只能用于对象类型(如Integer),不能用于基本类型(如int)。如果使用的是int[],需先转为Integer[]。
基本类型数组排序
int[] b = {1, 24, 56, 78, 76, 342, 65, 4};
Arrays.sort(b); // 直接升序排序,b 变为 [1, 4, 24, 56, 65, 76, 78, 342]Code language: JavaScript (javascript)
排序原理简述
Arrays.sort() 对不同类型使用不同算法:
| 类型 | 排序算法 |
|---|---|
基本类型(如 int、double) | 双轴快速排序(Dual-Pivot Quicksort) |
对象类型(如 Integer、String) | TimSort(归并排序的优化版本) |
注意事项
| 要点 | 说明 |
|---|---|
| 原地排序 | Arrays.sort() 直接修改原数组,不返回新数组 |
| 升序优先 | 默认升序,降序需额外处理 |
null 元素 | 对象数组中包含 null 时排序会抛 NullPointerException |
| 基本类型 vs 对象类型 | 降序排序仅支持对象类型 |
| 时间复杂度 | 平均 O(n log n) |
提示:排序后配合二分查找
Arrays.binarySearch()可以快速定位元素位置。
Previous: 练习——找出一个数组的最大数并放在最后一个元素的下一位
Next: 方法的理解