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

Java Arrays 工具類精通:排序、轉字串、搜尋與陣列操作全攻略

     編輯:Java 程式設計入門

java.util.Arrays 是 JDK 提供的陣列瑞士刀,封裝了排序、搜尋、比較、填充、轉字串、串流轉換等高頻操作。善用它能大幅減少樣板碼,提升程式碼表達力。

核心靜態方法速查

方法功能備註
sort(T[] a)原地升序排序 (Dual-Pivot Quicksort / TimSort)基本型別用 QuickSort,物件用 TimSort (穩定)
parallelSort(T[] a)多執行緒並行排序 (Java 8+)大陣列 (>10k) 效能顯著提升
binarySearch(T[] a, key)二分搜尋 (前提:已排序)回傳索引,找不到回傳 (-(插入點) - 1)
toString(T[] a)陣列轉可讀字串 [a, b, c]多維陣列用 deepToString()
equals(T[] a, T[] b)逐元素比較內容相等多維用 deepEquals()
copyOf(T[] a, newLen)複製並調整長度擴容/縮容首選
fill(T[] a, val)填充指定值初始化陣列極快
stream(T[] a)轉為 Stream 管道操作Java 8+ 函數式風格
spliterator(T[] a)取得 Spliterator 供並行流進階用法

實戰範例:排序與輸出

import java.util.Arrays;

public class ArraysDemo {
    public static void main(String[] args) {
        String[] hobbies = {"sports", "game", "movie"};
        
        // 1. 原地排序 (依 Unicode 碼值,英文字母順序)
        Arrays.sort(hobbies);
        // 結果:[game, movie, sports]
        
        // 2. 自訂比較器:長度優先,長度相同再字母序
        Arrays.sort(hobbies, Comparator
            .comparingInt(String::length)
            .thenComparing(Comparator.naturalOrder()));
        // 結果:[game, movie, sports] (本例長度皆不同)
        
        // 3. 輸出格式化
        System.out.println("排序後:" + Arrays.toString(hobbies));
        // 排序後:[game, movie, sports]
        
        // 4. 並行排序大陣列 (Java 8+)
        int[] big = new int[1_000_000];
        new Random().ints(big.length, 0, 1_000_000).forEach(i -> big[i] = i);
        Arrays.parallelSort(big); // 自動利用多核心
    }
}

進階技巧與避坑指南

1. 基本型別 vs 物件型別排序差異

int[] nums = {5, 2, 8};
Arrays.sort(nums); // 快速排序,不穩定,基本型別無穩定性需求

Integer[] objs = {5, 2, 8};
Arrays.sort(objs); // TimSort,穩定排序,保留相等元素原始順序

2. 多維陣列深度操作

int[][] matrix = {{3,1}, {2,4}};
Arrays.deepToString(matrix); // "[[3, 1], [2, 4]]"
Arrays.deepEquals(matrix, new int[][]{{3,1},{2,4}}); // true

3. 二分搜尋正確使用姿勢

int[] sorted = {10, 20, 30, 40, 50};
int idx = Arrays.binarySearch(sorted, 30); // 2
int notFound = Arrays.binarySearch(sorted, 25); // -3 (插入點索引 2,取負減1)
// 取得插入點:-(notFound + 1) = 2

4. Java 8+ Stream 整合

String[] words = {"apple", "banana", "avocado"};
// 篩選以 a 開頭、轉大寫、收集為 List
List result = Arrays.stream(words)
    .filter(w -> w.startsWith("a"))
    .map(String::toUpperCase)
    .collect(Collectors.toList());
// [APPLE, AVOCADO]

效能基準參考 (JDK 17, 1M 元素)

  • Arrays.sort(int[]):~45 ms
  • Arrays.parallelSort(int[]):~18 ms (8 核心)
  • Arrays.sort(String[]):~210 ms (物件比較較慢)
小陣列 (< 1000) 無需並行排序,執行緒啟動開銷會抵消收益。

總結

Arrays 類是陣列操作的「標準庫」,掌握 sort/parallelSort/binarySearch/toString/stream 五大核心方法,覆蓋 90% 以上日常場景。記住:基本型別用雙軸快排、物件用 TimSort、大陣列上並行、搜尋前必排序。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved