Java ArrayUtils數(shù)組工具類使用詳解
前言
各位數(shù)組操控師們好!今天給大家?guī)?lái)的是Apache Commons Lang3中的ArrayUtils工具類。這個(gè)工具就像數(shù)組界的"孫悟空",能讓你的數(shù)組隨心所欲地變大、變小、變長(zhǎng)、變短,再也不用對(duì)著原生數(shù)組的"死板"嘆氣了!
一、為什么需要ArrayUtils
原生Java數(shù)組就像一塊"鐵板":
- 長(zhǎng)度固定?改不了!
- 想加個(gè)元素?重寫一個(gè)!
- 找元素位置?自己循環(huán)!
而ArrayUtils就是給你的數(shù)組裝上"變形按鈕":
// 原始人寫法
String[] oldArray = {"Java", "Python"};
String[] newArray = new String[oldArray.length + 1];
System.arraycopy(oldArray, 0, newArray, 0, oldArray.length);
newArray[newArray.length - 1] = "Go";
// ArrayUtils現(xiàn)代寫法
String[] languages = ArrayUtils.add(new String[]{"Java", "Python"}, "Go");二、ArrayUtils的"七十二變"
1. 數(shù)組擴(kuò)容術(shù)(添加元素)
// 基本用法
int[] numbers = {1, 2, 3};
numbers = ArrayUtils.add(numbers, 4); // [1, 2, 3, 4]
// 指定位置插入
numbers = ArrayUtils.insert(2, numbers, 99); // [1, 2, 99, 3, 4]2. 數(shù)組縮身法(刪除元素)
// 按索引刪除
String[] fruits = {"Apple", "Banana", "Orange"};
fruits = ArrayUtils.remove(fruits, 1); // ["Apple", "Orange"]
// 按元素刪除(只刪第一個(gè)匹配項(xiàng))
fruits = ArrayUtils.removeElement(fruits, "Orange"); // ["Apple"]3. 數(shù)組查找功
// 查找元素位置
int[] primes = {2, 3, 5, 7, 11};
int index = ArrayUtils.indexOf(primes, 5); // 2
// 檢查包含關(guān)系
boolean hasEven = ArrayUtils.contains(primes, 2); // true4. 數(shù)組分身術(shù)(子數(shù)組)
// 截取子數(shù)組 int[] subArray = ArrayUtils.subarray(primes, 1, 4); // [3, 5, 7] // 克隆數(shù)組(深拷貝) int[] clone = ArrayUtils.clone(primes);
5. 數(shù)組變身大法(類型轉(zhuǎn)換)
// 包裝類型轉(zhuǎn)換 Integer[] boxed = ArrayUtils.toObject(primes); // 基本類型轉(zhuǎn)換 int[] unboxed = ArrayUtils.toPrimitive(boxed);
三、高級(jí)"仙術(shù)"展示
1. 數(shù)組合并
String[] frontend = {"HTML", "CSS"};
String[] backend = {"Java", "Python"};
String[] fullstack = ArrayUtils.addAll(frontend, backend);
// ["HTML", "CSS", "Java", "Python"]2. 數(shù)組反轉(zhuǎn)
ArrayUtils.reverse(fullstack); // ["Python", "Java", "CSS", "HTML"]
3. 數(shù)組填充
int[] empty = new int[5]; ArrayUtils.fill(empty, 42); // [42, 42, 42, 42, 42]
4. 空數(shù)組安全
// 安全處理null數(shù)組 String[] maybeNull = null; String[] safeArray = ArrayUtils.nullToEmpty(maybeNull); // 返回空數(shù)組而非null
四、ArrayUtils的"修仙指南"
性能提示:頻繁操作考慮先用List再轉(zhuǎn)數(shù)組
null安全:所有方法都處理null輸入
多維數(shù)組:支持多維數(shù)組操作(如indexOf多維查找)
特殊比較:提供equals()方法比較數(shù)組內(nèi)容
五、與傳統(tǒng)方法的"功力對(duì)比"
| 操作 | 原生寫法代碼量 | ArrayUtils代碼量 |
|---|---|---|
| 添加元素 | 5-7行 | 1行 |
| 刪除元素 | 需要循環(huán) | 1行 |
| 查找元素 | 需要循環(huán) | 1行 |
| 數(shù)組合并 | System.arraycopy | 1行 |
六、現(xiàn)代"御劍飛行"方案
// Java 8 Stream方案(適合復(fù)雜操作)
String[] filtered = Arrays.stream(fullstack)
.filter(s -> !s.equals("CSS"))
.toArray(String[]::new);
// 與Collections配合使用
List<String> list = new ArrayList<>(Arrays.asList(fullstack));
list.add("JavaScript");
String[] updated = list.toArray(new String[0]);七、總結(jié)
ArrayUtils就像是:
- 數(shù)組擴(kuò)容的"金箍棒"??
- 元素操作的"筋斗云"
- ??數(shù)組查找的"火眼金睛"??
- null安全的"避雷針"?
記住數(shù)組操作的真理:“直接操作數(shù)組就像用牙啃椰子,用對(duì)工具才是王道!”
最后送上數(shù)組操作速查表:
| 需求 | ArrayUtils方法 | 示例 |
|---|---|---|
| 添加元素 | add() / addAll() | add(array, element) |
| 刪除元素 | remove() / removeElement() | remove(array, index) |
| 查找元素 | indexOf() / contains() | indexOf(array, value) |
| 子數(shù)組 | subarray() | subarray(array, start, end) |
| 空數(shù)組轉(zhuǎn)換 | nullToEmpty() | nullToEmpty(null) |
| 數(shù)組反轉(zhuǎn) | reverse() | reverse(array) |
以上就是Java ArrayUtils數(shù)組工具類使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Java ArrayUtils的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Apache Commons Math3學(xué)習(xí)之?dāng)?shù)值積分實(shí)例代碼
這篇文章主要介紹了Apache Commons Math3學(xué)習(xí)之?dāng)?shù)值積分實(shí)例代碼,涉及使用辛普森積分的例子,這里分享給大家,供需要的朋友參考。2017-10-10
java遞歸實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)數(shù)據(jù)完整案例
遞歸算法的代碼比較簡(jiǎn)潔,可讀性較好;但是在實(shí)際的業(yè)務(wù)處理中會(huì)出現(xiàn)多次的重復(fù)調(diào)用,如果處理不好,很容易出現(xiàn)StackOverflowError報(bào)錯(cuò),這篇文章主要給大家介紹了關(guān)于java遞歸實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2023-04-04
利用線程實(shí)現(xiàn)動(dòng)態(tài)顯示系統(tǒng)時(shí)間
編寫Applet小程序,通過(guò)在HTML文檔中接收參數(shù),顯示當(dāng)前的系統(tǒng)時(shí)間,需要的朋友可以參考下2015-10-10
springboot 加載 META-INF/spring.factories方式
這篇文章主要介紹了springboot 加載 META-INF/spring.factories方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Springboot訪問(wèn)html頁(yè)面步驟解析
這篇文章主要介紹了Springboot訪問(wèn)html頁(yè)面過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Spring?cloud如何實(shí)現(xiàn)FeignClient指定Zone調(diào)用
這篇文章主要介紹了Spring?cloud如何實(shí)現(xiàn)FeignClient指定Zone調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Java調(diào)用C#動(dòng)態(tài)庫(kù)的三種方法詳解
在這個(gè)多語(yǔ)言編程的時(shí)代,Java和C#就像兩位才華橫溢的舞者,各自在不同的舞臺(tái)上展現(xiàn)著獨(dú)特的魅力,然而,當(dāng)它們攜手合作時(shí),又會(huì)碰撞出怎樣絢麗的火花呢?今天,我們就來(lái)探討一下Java調(diào)用C#動(dòng)態(tài)庫(kù)的三種方法,需要的朋友可以參考下2025-06-06
Java調(diào)用ChatGPT(基于SpringBoot和Vue)實(shí)現(xiàn)可連續(xù)對(duì)話和流式輸出的ChatGPT API
這篇文章主要介紹了Java調(diào)用ChatGPT(基于SpringBoot和Vue),實(shí)現(xiàn)可連續(xù)對(duì)話和流式輸出的ChatGPT API(可自定義實(shí)現(xiàn)AI助手),文中代碼示例介紹的非常詳細(xì),感興趣的朋友可以參考下2023-04-04
springMVC+velocity實(shí)現(xiàn)仿Datatables局部刷新分頁(yè)方法
下面小編就為大家分享一篇springMVC+velocity實(shí)現(xiàn)仿Datatables局部刷新分頁(yè)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02

