[Commons]效率篇之陣列操作(ArrayUtils)
陣列是開發中時常會用到的,但是陣列在操作和查詢過程中也有自己的侷限性,如:不能動態改變陣列大小,查詢元素需要迴圈遍歷。對此,在開發中如何去便捷的使用陣列呢?可以看看如下的例子。
問題:現有一個數組,需要判斷該陣列中是否存在某個元素,並取得其下標。
遇到這個問題,估計有多數的人會想去遍歷這個陣列,逐個判斷,直到找到這個物件。例如:
- public void contains() {
- String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
- boolean containsBlue = false;
- for (String color : strings) {
- if (StringUtils.equals(color, "Blue")) {
- containsBlue = true;
- break;
- }
- }
- System.out.println("Array contains 'Blue'? " + containsBlue);
- }
輸出結果:Array contains 'Blue'? true
但是,每次都寫for迴圈會使程式碼的圈複雜度增加有咩有。。。
其實,Apache Commons Lang庫中的ArrayUtils工具類給已經給咱們咱提供了現成的實現。可以只需要一行程式碼。如下:
- public void contains() {
- String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
- boolean containsBlue = ArrayUtils.contains(strings, "Blue");
- System.out.println("Array contains 'Blue'? " + containsBlue);
- }
如果陣列中存放的不是基本型別的元素,該方法會呼叫元素的equals()方法搜尋匹配的物件。
同樣,判斷一個元素在陣列中的第幾個元素,可以這麼實現:
- public void indexOf() {
- String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
- int blueIndex = ArrayUtils.indexOf(strings, "Blue");
- System.out.println("Array indexOf 'Blue'? " + blueIndex);
- }
輸出結果:Array indexOf 'Blue'? 2
ArrayUtils也提供了lastIndexOf方法,方便從後向前查詢元素。
問題:向一個數組中某一個位置新增或者刪除元素。
大家都知道,陣列是一經初始化,是不能修改其大小的,這就導致無法直接向陣列新增或者刪除元素。如果需要實現這個功能,則需要在建立一個數組,其大小為操作完後的陣列大小,然後自己for迴圈把新的資料放入到陣列。當然,也可以使用JAVA自帶的Arrays類把陣列轉換為List,然後進行修改。
ArrayUtils也提供了一行程式碼搞定問題的方法,如下:
- public void add() {
- String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
- strings = ArrayUtils.add(strings, 3, "Yellow");
- System.out.println("Array:" + ArrayUtils.toString(strings));
- }
輸出結果:Array:{Red,Orange,Blue,Yellow,Brown,Red}
可以看到,一行程式碼就完成了新增元素。十分方便。
ArrayUtils中還提供了反轉陣列,一次新增多個元素等方法例如:
- public void reverse() {
- String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
- ArrayUtils.reverse(strings);
- System.out.println("Array:" + ArrayUtils.toString(strings));
- strings = ArrayUtils.addAll(strings, "Yellow", "Green");
- System.out.println("Array:" + ArrayUtils.toString(strings));
- }
輸出結果:
Array:{Red,Brown,Blue,Orange,Red}
Array:{Red,Brown,Blue,Orange,Red,Yellow,Green}
其實,實際情況是這樣的,大家專案中對集合的操作都用的List,List的確比陣列使用起來方便許多。可有的場景下,你拿到的只是一個數組,你只需要完成新增者刪除元素等簡單方法,就可以使用Commons中提供的方法,不用再做轉換。與此同時,Commons 庫對Java中的List/Map/Set也有相應的工具,後面的帖子也會涉及到。
相關推薦
[Commons]效率篇之陣列操作(ArrayUtils)
開篇話:Apache Commons類庫有很多,幾乎大多數的開源框架都依賴於它,那麼,它有什麼好處呢?Commons中的工具會節省你大部分時間,它包含一些常用的靜態方法和Java的擴充套件。是開發中提高效率的一套框架,同時也使得程式碼變得簡單易懂。開Commons效率篇帖子
人工智慧之陣列操作
陣列操作(python中numpy庫) 建立陣列 1.使用單一值建立陣列:zeros()建立全0的陣列,ones()建立全1的陣列,full()建立一個數組,指定元素,indentity()建立一個方陣,主對角線全為1,eye()建立一個m*n的陣列主對角線的元素是1 2.從現有的資料初始化陣列:num
R語言開發之陣列操作了解下
陣列是可以在二維及以上儲存資料的R資料物件, 例如 - 如果建立一個維陣列(2,3,4),那麼它將建立4個矩形矩陣,每個矩陣具有2行和3列並且陣列只能儲存資料型別。我們可通過使用array()函式來建立
Leetcode題解中級篇之陣列和字串(8)奇偶連結串列
題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/31/linked-list/83/ 題目描述: 奇偶連結串列 給定一個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意
Leetcode題解中級篇之陣列和字串(6)遞增的三元子序列
題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/29/array-and-strings/80/ 題目描述: 給定一個未排序的陣列,判斷這個陣列中是否存在長度為 3 的遞增子序列
Leetcode題解中級篇之陣列和字串(5)最長迴文子串
題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/29/array-and-strings/79/ 題目描述: 給定一個字串 s,找到 s 中最長的迴
Leetcode題解中級篇之陣列和字串(4)無重複字元的最長子串
題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/29/array-and-strings/78/ 題目描述: 給定一個字串,請你找出其中不含有重複字元的 最長子串&nb
快學scala之陣列操作
object Array_opt { def main(args: Array[String]) { // init an array val array = new Array[St
Java資料結構與演算法初級篇之陣列、集合和散列表
原始碼下載地址:https://download.csdn.net/download/geduo_83/10913510 之前沒有寫過關於資料結構的文章,那麼今天我們將在本文中介紹最基礎、最簡單的資料結構。 陣列,作為資料結構中最基礎的一個儲存方式,是我們學習一切資料結構
微信小程式之陣列操作:push與concat的區別
微信小程式中需要用到陣列的操作,介於本人js基礎薄弱,故陣列操作進行簡單記錄,以備後期方便學習: push和concat二者功能很相像,但有兩點區別。 先看如下例子: var arr = []; arr.push(1); arr.push(2); arr.push([3,
C++:位操作基礎篇之位操作全面總結
位操作篇共分為基礎篇和提高篇,基礎篇主要對位操作進行全面總結,幫助大家梳理知識。提高篇則針對各大IT公司如微軟、騰訊、百度、360等公司的筆試面試題作詳細的解答,使大家能熟練應對在筆試面試中位操作題目。 下面就先來對位操作作個全面總結,歡迎大家補充。 在計
每天一點兒JAVA之陣列篇--一維和多維陣列的初始化和基本操作
<span style="font-family: Arial, Helvetica, sans-serif;"> * <p>Description: 演示一維陣列和多維陣列的初始化和基本操作</p></span> * <
Django基礎篇之數據庫選擇及相關操作
setting 必須 需要 mysql pyc -- creates 127.0.0.1 settings 在djanjo框架中我們最常用的框架分別就是mysql和sqlit了,下面我們將分別講述一下這倆種數據庫的基礎必備知識 mysql 一、利用命令創建(在終端上執行)
前端學PHP之面向對象系列第五篇——對象操作
fas get toolbar 影響 運算 描述 ssa reference 保持 對象克隆 對象復制,又叫對象克隆,可以通過 clone 關鍵字來完成 在多數情況下,我們並不需要完全復制一個對象來獲得其中屬性。但有一個情況下確實需要:如果你有一個窗口對象,該對象持
第十五篇:JavaScript 之 Dom操作
頁面 對象模型 面向 方法 bsp log gpo eva div 一、後臺管理頁面布局 二、JavaScript函數 三、eval以及時間操作 四、JavaScript作用域 五、JavaScript面向對象模型 六、DOM選擇器 七、DOM事件操作 八、DOM綁定事件的
OC學習篇之---檔案的操作
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
資料結構與演算法之陣列篇
Q1:為什麼很多程式語言中,陣列都從0開始編號? 舉例說明: 從陣列儲存的記憶體模型上來看,"下標"最確切的定義應該是"偏移(offset)"。前面也講到,如果用a來表示陣列的首地址,a[0]就是偏移為0的位
rust學習筆記基礎篇3--陣列,切片,元組的變數宣告(霜之小刀)
rust學習筆記基礎篇3–陣列,切片,元組的變數宣告(霜之小刀) 歡迎轉載和引用,若有問題請聯絡 若有疑問,請聯絡 Email : [email protected] QQ:2279557541 陣列指的是一組型別必須相同,個數不變的組合 切
leetcode演算法之陣列篇(題35):搜尋插入位置
題目:給定一個排序陣列和一個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。 示例 1:輸入: [1,3,5,6], 5 &nbs
leetcode演算法之陣列篇(題27):移除元素
題目:給定一個數組 nums 和一個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 元素的順序可以改變。你不需要考慮