JDK 原生數組 API 極其匱乏:無刪除、無反轉、無填充、無安全拷貝。ArrayUtils 提供 50+ 實用方法,已成為 Java 開發標準庫。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
ArrayUtils.isEmpty(arr) // null 或 length=0 返回 true
ArrayUtils.isNotEmpty(arr) // 相反
int[] src = {1,2,3,4,5};
int[] dest = ArrayUtils.subarray(src, 1, 4); // [2,3,4] 索引 1 到 3
int[] copy = ArrayUtils.clone(src); // 深拷貝
int[] arr = {1,2,3};
arr = ArrayUtils.add(arr, 4); // 尾部添加 -> [1,2,3,4]
arr = ArrayUtils.add(arr, 1, 99); // 索引 1 插入 -> [1,99,2,3]
arr = ArrayUtils.addAll(arr, new int[]{5,6}); // 批量添加
int[] arr = {1,2,3,4,5};
arr = ArrayUtils.remove(arr, 2); // 刪除索引 2 -> [1,2,4,5]
arr = ArrayUtils.removeElement(arr, 3); // 刪除首個值為 3 的元素 -> [1,2,4,5]
arr = ArrayUtils.removeElements(arr, 1, 4); // 刪除所有 1 和 4 -> [2,5]
int[] arr = {1,2,3,4,5};
ArrayUtils.reverse(arr); // arr 變為 [5,4,3,2,1]
int[] arr = {1,2,3,2,1};
ArrayUtils.indexOf(arr, 2); // 1 (首次出現)
ArrayUtils.lastIndexOf(arr, 2); // 3 (最後出現)
ArrayUtils.contains(arr, 3); // true
int[] primitives = {1,2,3};
Integer[] objects = ArrayUtils.toObject(primitives); // 裝箱
int[] back = ArrayUtils.toPrimitive(objects); // 拆箱
// 自動處理 null:toPrimitive 默認 null→0,可指定默認值
int[] arr = new int[5];
ArrayUtils.fill(arr, 7); // [7,7,7,7,7]
int[] arr = {1,2,3,4,5,6};
int[] sub = ArrayUtils.subarray(arr, 2, 5); // [3,4,5] 索引 2 到 4
// 高性能:ByteBuffer(大端序,網絡字節序)
byte[] bytes = ByteBuffer.allocate(4).putInt(8).array();
// [0, 0, 0, 8]
// 手動位運算(無依賴)
byte[] manual = {
(byte)(val >> 24),
(byte)(val >> 16),
(byte)(val >> 8),
(byte)val
};
| 操作 | 時間複雜度 | 備註 |
|---|---|---|
| add/remove | O(n) | 創建新數組拷貝,頻繁操作改用 ArrayList |
| reverse | O(n) | 原地交換,空間 O(1) |
| indexOf/contains | O(n) | 線性查找,大數據量考慮排序後二分或 Set |
| toObject/toPrimitive | O(n) | 大量裝箱拆箱影響 GC,熱點路徑避免 |
arr = ArrayUtils.add(arr, x)Arrays.asList(int[]) 返回 List 而非 ListCopyOnWriteArrayList收藏這張速查表,告別手寫數組工具類,專注業務邏輯開發。