| 方法類別 | 代表方法 | 說明 |
|---|---|---|
| 字符串化 | toString(int[]), deepToString(Object[]) | 優雅輸出數組內容,多維遞歸 |
| 排序 | sort(int[]), sort(T[], Comparator) | 基本類型雙樞軸快排,對象 TimSort(穩定) |
| 二分查找 | binarySearch(int[], key), binarySearch(T[], key, Comparator) | 前提:已排序;返回索引或 -(插入點+1) |
| 拷貝 | copyOf(T[], newLen), copyOfRange(T[], from, to) | 底層 System.arraycopy,支持擴容/截取 |
| 比較 | equals(int[], int[]), deepEquals(Object[], Object[]) | 長度+元素逐一比較,對象調用 equals |
| 填充 | fill(int[], val), fill(int[], from, to, val) | 指定範圍賦值 |
| 哈希碼 | hashCode(int[]), deepHashCode(Object[]) | 31 乘法累加,位置敏感 |
| 並行操作 | parallelSort, parallelPrefix, parallelSetAll | Java 8+ 多核並行,大數組顯著提速 |
| 流式轉換 | stream(int[]), spliterator | 接入 Stream API |
DualPivotQuicksort(Java 7+),雙樞軸快速排序,原地、不穩定、平均 O(n log n)TimSort(Java 7+),歸並+插入混合,穩定,利用數據固有有序性parallelSort 將數組分塊並行排序再歸並,閾值約 8192String[] arr = {"hello", "world", "Break", "abc"};
// 1. 忽略大小寫升序
Arrays.sort(arr, String.CASE_INSENSITIVE_ORDER);
// [abc, Break, hello, world]
// 2. 忽略大小寫降序 - 匿名內部類
Arrays.sort(arr, new Comparator<String>() {
public int compare(String o1, String o2) {
return o2.compareToIgnoreCase(o1); // 交換參數實現逆序
}
});
// 3. 降序 - Collections 工具
Arrays.sort(arr, Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER));
// 4. 自定義規則:長度優先,長度相同按字典序
Arrays.sort(arr, Comparator
.comparingInt(String::length)
.thenComparing(String.CASE_INSENSITIVE_ORDER));
體現策略模式:排序算法(不變)與比較策略(可變)分離,運行時動態注入。
int[] sorted = {3, 5, 7, 13, 21};
Arrays.binarySearch(sorted, 13); // 3 (找到)
Arrays.binarySearch(sorted, 11); // -4 (未找到,插入點=3,即 -(3+1))
前提:數組必須按相同比較器已排序;若有重複元素,返回任一匹配索引(不保證首/尾)。
Java 無真正多維數組,int[][] 實為「數組的數組」:
int[][] matrix = new int[2][3]; // 2行3列
matrix[0] = new int[]{1,2,3};
matrix[1] = new int[5]; // 第二行長度可不同!
deepToString:遞歸輸出 [[1, 2], [3, 4, 5]]deepEquals:遞歸比較結構與內容deepHashCode:遞歸計算哈希Arrays 功能有限,ArrayUtils 提供豐富增強:
| 功能 | 方法示例 |
|---|---|
| 翻轉 | reverse(int[]) |
| 查找 | indexOf(int[], val), lastIndexOf, contains |
| 刪除 | remove(int[], index), removeAll(int[], indices...), removeElement |
| 添加 | add(int[], element), add(int[], index, element), addAll(int[], int[]...) |
| 判斷有序 | isSorted(int[]) |
| 轉基本類型 | toPrimitive(Integer[]), toObject(int[]) |
注意:數組長度固定,增刪實為「創建新數組+拷貝」,頻繁操作建議用 ArrayList。
toString:StringBuilder 循環拼接copyOfRange:new int[to-from] + System.arraycopybinarySearch:雙指針 low/high,中位 (low+high) >>> 1,無符號右移防溢出sort:委派 DualPivotQuicksort/TimSort 靜態類,數百行優化代碼Arrays 標準方法,避免手寫循環parallelSort/parallelPrefixArrayList/LinkedListList<List<T>> 或 Map 索引commons-lang3 獲得 ArrayUtils 補充功能下一節將探討 Java 日期時間 API 的演進與實戰技巧。