java数组排序

java数组排序

在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)

通过合理选择排序方法,可以高效处理不同场景下的数组排序需求。

尊享推荐

365allsports 如何才能彻底刮干净络腮胡
世界杯365平台 全程马拉松是多少公里,42.195:全程马拉松为何是这个距离?
世界杯365平台 马桶堵了怎么通?教你5个妙招分分钟搞定,不仅省时还省力
世界杯365平台 不再裹脚的文件管理利器:FileBrowser评测与使用指南