陣列排序:Arrays.sort
int[] arr = {1, 4, 6, 333, 8, 2};
Arrays.sort(arr); // 升序,原地排序
// 結果:1, 2, 4, 6, 8, 333
- 基本型別陣列:雙軸快速排序
- 物件陣列:TimSort(穩定、O(n log n))
- 支援
Comparator 客製化:Arrays.sort(arr, (a,b) -> b - a) 降序
集合排序:Collections.sort
List list = new ArrayList<>(Arrays.asList(1, 55, 9, 0, 2));
Collections.sort(list); // 升序
// 降序
Collections.sort(list, (o1, o2) -> o2 - o1);
// 或
list.sort(Comparator.reverseOrder());
核心差異
| 特性 | Arrays.sort | Collections.sort / List.sort |
| 適用對象 | 陣列 | List 實作 |
| 基本型別 | 直接支援 | 需裝箱 |
| 穩定性 | 物件陣列穩定 | 穩定 |
| 並行排序 | Arrays.parallelSort (JDK 8+) | 需自行並行流 |
自訂物件排序範例
record User(String name, int age) {}
List users = List.of(new User("Bob", 30), new User("Alice", 25));
users.sort(Comparator.comparing(User::age).thenComparing(User::name));
// 年齡升序,同齡按名字升序
效能提示
- 大量資料優先
parallelSort 或 Stream 並行
- 避免在 Comparator 執行昂貴運算,可先提取排序鍵
- 基本型別陣列排序比 List 快(無裝箱開銷)