首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 排序大全:Arrays.sort 與 Collections.sort 完整使用指南

     編輯:Java 綜合教學

Java 排序核心 API 深度解析

在 Java 開發中,排序是處理集合與陣列時最基礎也最常見的操作。Java 標準庫提供了 java.util.Arrays 與 java.util.Collections 兩大工具類,分別針對陣列與集合提供高效的排序實現。本文將系統梳理這兩大 API 的使用方式、進階技巧與注意事項。

一、陣列排序:Arrays.sort()

Arrays.sort() 針對基本型別陣列採用雙軸快速排序,針對物件陣列採用 TimSort(歸併排序改進版),穩定且高效。

基本型別陣列排序

public void arraySort() {
    int[] arr = {1, 4, 6, 333, 8, 2};
    Arrays.sort(arr); // 原地排序,預設升序
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
}

指定範圍排序

// 僅對索引 1 到 4(不含 5)的元素排序
Arrays.sort(arr, 1, 5);

二、集合排序:Collections.sort()

Collections.sort() 僅接受 List 介面實現,內部將列表轉為陣列排序後再寫回,同樣採用 TimSort,穩定性極佳。

自然順序排序(升序)

public void listSortAsc() {
    List<Integer> list = new ArrayList<>();
    list.add(1); list.add(55); list.add(9); list.add(0); list.add(2);
    Collections.sort(list); // 元素需實作 Comparable
    list.forEach(System.out::println);
}

自訂比較器排序(降序)

public void listSortDesc() {
    List<Integer> list = new ArrayList<>();
    list.add(1); list.add(55); list.add(9); list.add(0); list.add(2);
    
    // 匿名內部類寫法
    Collections.sort(list, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o2 - o1; // 降序
        }
    });
    
    // Java 8+ Lambda 簡寫(推薦)
    // list.sort((o1, o2) -> o2 - o1);
    // 或使用 Comparator 靜態方法
    // list.sort(Comparator.reverseOrder());
    
    list.forEach(System.out::println);
}

三、進階技巧與最佳實踐

  • Null 安全:Java 8+ 可用 Comparator.nullsFirst() 或 nullsLast() 處理空值。
  • 多鍵排序:Comparator.comparing(User::getAge).thenComparing(User::getName) 鏈式組合。
  • 平行排序:大數據量時可用 Arrays.parallelSort() 利用多核心加速(Java 8+)。
  • 效能提示:基本型別陣列排序比物件陣列快;List.sort() 比 Collections.sort() 略快(避免轉陣列開銷)。

四、總結對照表

場景API關鍵點
基本型別陣列Arrays.sort()原地排序,雙軸快排
物件陣列Arrays.sort()需實作 Comparable 或傳 Comparator
List 集合Collections.sort() / list.sort()穩定排序,支援 Lambda
大數據量Arrays.parallelSort()多執行緒並行,閾值約 8192 元素
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved