1. 程式人生 > >[Commons]效率篇之陣列操作(ArrayUtils)

[Commons]效率篇之陣列操作(ArrayUtils)

開篇話:Apache Commons類庫有很多,幾乎大多數的開源框架都依賴於它,那麼,它有什麼好處呢?Commons中的工具會節省你大部分時間,它包含一些常用的靜態方法和Java的擴充套件。是開發中提高效率的一套框架,同時也使得程式碼變得簡單易懂。開Commons效率篇帖子的宗旨是大家看看小例子,自己揣摩揣摩,看看實際的專案中能用到的地方有哪些,然後運用到自己的程式碼中,使得程式碼簡潔,也提高效率。

    陣列是開發中時常會用到的,但是陣列在操作和查詢過程中也有自己的侷限性,如:不能動態改變陣列大小,查詢元素需要迴圈遍歷。對此,在開發中如何去便捷的使用陣列呢?可以看看如下的例子。

    問題:現有一個數組,需要判斷該陣列中是否存在某個元素,並取得其下標。
    遇到這個問題,估計有多數的人會想去遍歷這個陣列,逐個判斷,直到找到這個物件。例如:
  1. public void contains() {
  2.     String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
  3.     boolean containsBlue = false;
  4.     for (String color : strings) {
  5.         if (StringUtils.equals(color, "Blue")) {
  6.             containsBlue = true;
  7.             break;
  8.         }
  9.     }
  10.     System.out.println("Array contains 'Blue'? " + containsBlue);
  11. }
複製程式碼
輸出結果:Array contains 'Blue'? true
    但是,每次都寫for迴圈會使程式碼的圈複雜度增加有咩有。。。
    其實,Apache Commons Lang庫中的ArrayUtils工具類給已經給咱們咱提供了現成的實現。可以只需要一行程式碼。如下:
  1. public void contains() {
  2.     String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
  3.     boolean containsBlue = ArrayUtils.contains(strings, "Blue");
  4.     System.out.println("Array contains 'Blue'? " + containsBlue);
  5. }
複製程式碼
    如果陣列中存放的不是基本型別的元素,該方法會呼叫元素的equals()方法搜尋匹配的物件。
    同樣,判斷一個元素在陣列中的第幾個元素,可以這麼實現:
  1. public void indexOf() {
  2.     String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
  3.     int blueIndex = ArrayUtils.indexOf(strings, "Blue");
  4.     System.out.println("Array indexOf 'Blue'? " + blueIndex);
  5. }
複製程式碼
輸出結果:Array indexOf 'Blue'? 2
ArrayUtils也提供了lastIndexOf方法,方便從後向前查詢元素。

    問題:向一個數組中某一個位置新增或者刪除元素。
    大家都知道,陣列是一經初始化,是不能修改其大小的,這就導致無法直接向陣列新增或者刪除元素。如果需要實現這個功能,則需要在建立一個數組,其大小為操作完後的陣列大小,然後自己for迴圈把新的資料放入到陣列。當然,也可以使用JAVA自帶的Arrays類把陣列轉換為List,然後進行修改。
    ArrayUtils也提供了一行程式碼搞定問題的方法,如下:
  1. public void add() {
  2.     String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
  3.     strings = ArrayUtils.add(strings, 3, "Yellow");
  4.     System.out.println("Array:" + ArrayUtils.toString(strings));
  5. }
複製程式碼
輸出結果:Array:{Red,Orange,Blue,Yellow,Brown,Red}
可以看到,一行程式碼就完成了新增元素。十分方便。

ArrayUtils中還提供了反轉陣列,一次新增多個元素等方法例如:
  1. public void reverse() {
  2.     String[] strings = { "Red", "Orange", "Blue", "Brown", "Red" };
  3.     ArrayUtils.reverse(strings);
  4.     System.out.println("Array:" + ArrayUtils.toString(strings));
  5.     strings = ArrayUtils.addAll(strings, "Yellow", "Green");
  6.     System.out.println("Array:" + ArrayUtils.toString(strings));
  7. }
複製程式碼
輸出結果:
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) 額外空間的條件下完成。 元素的順序可以改變。你不需要考慮