在Java中,对数组排序有多种方法,具体取决于数组类型(基本类型或对象)和排序需求(自然顺序、自定义规则等)。以下是详细总结及示例:
1. 基本类型数组排序
使用 Arrays.sort() 方法,默认按升序排列:
int[] nums = {5, 3, 9, 1};
Arrays.sort(nums); // 排序后:[1, 3, 5, 9]
double[] doubles = {3.2, 1.5, 4.7};
Arrays.sort(doubles); // [1.5, 3.2, 4.7]
2. 对象数组排序
(1) 自然顺序排序(需实现 Comparable)
若对象已实现 Comparable 接口(如 String、Integer):
String[] names = {"John", "Alice", "Bob"};
Arrays.sort(names); // 按字典序排序:["Alice", "Bob", "John"]
(2) 自定义排序规则(使用 Comparator)
对未实现 Comparable 的对象或需要特殊规则时:
class Person {
String name;
int age;
// 构造方法、getter/setter省略
}
Person[] people = {new Person("Alice", 30), new Person("Bob", 25)};
// 按年龄升序排序
Arrays.sort(people, Comparator.comparingInt(p -> p.age));
// 按姓名降序排序
Arrays.sort(people, (p1, p2) -> p2.name.compareTo(p1.name));
3. 降序排序
(1) 基本类型数组
需手动反转数组:
int[] nums = {5, 3, 9, 1};
Arrays.sort(nums); // 升序排序:[1, 3, 5, 9]
// 反转数组实现降序
for (int i = 0; i < nums.length / 2; i++) {
int temp = nums[i];
nums[i] = nums[nums.length - 1 - i];
nums[nums.length - 1 - i] = temp;
}
(2) 对象数组
使用 Comparator.reversed():
Integer[] nums = {5, 3, 9, 1};
Arrays.sort(nums, Comparator.reverseOrder()); // 降序:[9, 5, 3, 1]
4. 部分排序
对数组的指定范围排序:
int[] nums = {5, 3, 9, 1, 7};
Arrays.sort(nums, 1, 4); // 对索引[1,4)区间排序
// 结果:原数组变为 [5, 1, 3, 9, 7]
5. 并行排序(Java 8+)
使用 Arrays.parallelSort() 提高大数组排序性能:
int[] largeArray = new int[100_000];
// 填充数据...
Arrays.parallelSort(largeArray); // 利用多核并行排序
6. 注意事项
对象数组的 Comparable 实现:若未实现 Comparable 直接调用 Arrays.sort() 会抛出 ClassCastException。
稳定性:Arrays.sort() 对对象数组使用稳定排序(归并排序变体),基本类型数组使用优化后的快速排序。
性能:
基本类型数组排序通常比对象数组快。
parallelSort() 在数据量较大时(如超过 1 万元素)性能优势明显。
7. 示例:自定义对象多级排序
// 按年龄升序,若年龄相同则按姓名降序
Arrays.sort(people, Comparator
.comparingInt(Person::getAge)
.thenComparing(Comparator.comparing(Person::getName).reversed())
);
总结
场景
方法/工具类
示例代码片段
基本类型升序
Arrays.sort()
Arrays.sort(intArray)
对象自然顺序
Arrays.sort()
Arrays.sort(StringArray)
自定义规则
Comparator
Arrays.sort(people, comparing(Person::getAge))
降序排序
Comparator.reverseOrder()
Arrays.sort(nums, reverseOrder())
部分排序
Arrays.sort(array, from, to)
Arrays.sort(nums, 1, 4)
并行排序
Arrays.parallelSort()
Arrays.parallelSort(largeArray)
通过合理选择排序方法,可以高效处理不同场景下的数组排序需求。