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

Java 字串陣列排序一行搞定:Arrays.sort() 完整用法與原理

     編輯:Java 相關知識

最簡單的排序寫法

import java.util.Arrays;

String[] fruits = {"banana", "apple", "cherry", "date"};
Arrays.sort(fruits); // 就地排序,無回傳值
System.out.println(Arrays.toString(fruits));
// 輸出: [apple, banana, cherry, date]

排序規則詳解

預設:自然順序

  • String 實作 Comparable<String>,按 Unicode 碼位序 比較。
  • 順序:數字 (0-9) < 大寫字母 (A-Z) < 小寫字母 (a-z)。
String[] mixed = {"abc", "ABC", "123", "Abc"};
Arrays.sort(mixed);
// 結果: [123, ABC, Abc, abc]

自訂排序:Comparator

// 忽略大小寫
Arrays.sort(fruits, String.CASE_INSENSITIVE_ORDER);

// 依長度排序
Arrays.sort(fruits, Comparator.comparingInt(String::length));

// 多層次:先長度,再字典序
Arrays.sort(fruits, Comparator
    .comparingInt(String::length)
    .thenComparing(Comparator.naturalOrder()));

// 反序
Arrays.sort(fruits, Comparator.reverseOrder());

進階用法

部分範圍排序

String[] arr = {"e", "d", "c", "b", "a"};
Arrays.sort(arr, 1, 4); // 只排索引 1~3 (d,c,b -> b,c,d)
// 結果: [e, b, c, d, a]

平行排序 (Java 8+)

// 大陣列 (超過 8192 元素) 會自動啟用多執行緒
Arrays.parallelSort(hugeArray);

避免修改原陣列

String[] sorted = Arrays.stream(original)
    .sorted()
    .toArray(String[]::new);
// 或
String[] sorted = original.clone();
Arrays.sort(sorted);

底層演算法

TimSort 利用資料既有有序片段,對近乎有序資料極快 (O(n))。

常見陷阱

  • ❌ Arrays.sort(null) → NullPointerException
  • ❌ 陣列含 null 元素 → NullPointerException (自然順序)
  • ✅ 處理 null:Arrays.sort(arr, Comparator.nullsFirst(Comparator.naturalOrder()))
  • ❌ 期望回傳新陣列 → Arrays.sort() 回傳 void

效能微調建議

  1. 小陣列 (< 50) 插入排序更快,TimSort 內建此優化。
  2. 大陣列且多核 CPU → parallelSort()。
  3. 頻繁排序同一陣列 → 重複使用 Comparator 實例避免物件分配。
  4. 自訂比較器盡量簡單,避免在 compare() 做重運算。

完整範例程式

import java.util.*;

public class StringArraySortDemo {
    public static void main(String[] args) {
        String[] data = {"delta", "Alpha", "epsilon", "beta", "Gamma", "123"};
        
        System.out.println("原始: " + Arrays.toString(data));
        
        // 1. 自然順序
        Arrays.sort(data);
        System.out.println("自然序: " + Arrays.toString(data));
        
        // 2. 忽略大小寫
        Arrays.sort(data, String.CASE_INSENSITIVE_ORDER);
        System.out.println("忽略大小寫: " + Arrays.toString(data));
        
        // 3. 依長度
        Arrays.sort(data, Comparator.comparingInt(String::length));
        System.out.println("依長度: " + Arrays.toString(data));
        
        // 4. 部分排序
        String[] part = data.clone();
        Arrays.sort(part, 0, 3);
        System.out.println("前3排序: " + Arrays.toString(part));
    }
}

總結

  • Arrays.sort(String[]) 是排序字串陣列的標準、高效方式。
  • 預設 Unicode 碼位序:數字 < 大寫 < 小寫。
  • 靈活運用 Comparator 實現忽略大小寫、長度、多鍵值、反序等需求。
  • 注意 null 元素與 void 回傳值特性。
  • 大資料量善用 parallelSort() 發揮多核效能。

下次需要排序字串陣列,直接 Arrays.sort(arr) 走起!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
陣列類型演算法複雜度穩定性
物件 (String 等)TimSort (合併排序 + 插入排序)O(n log n)穩定
基本型別 (int[] 等)Dual-Pivot QuicksortO(n log n)不穩定