好程式設計師Java培訓Java容器類List和Set分析

好程式設計師發表於2020-07-30

  好程式設計師Java 培訓 Java 容器類List Set 分析, 容器類可以大大提高程式設計效率和程式設計能力,在Java2 中,所有的容器都由 SUN 公司的 Joshua Bloch 進行了重新設計,豐富了容器類庫的功能。 Java2 容器類類庫的用途是“儲存物件”,它分為兩類,這兩類如下:

   Collection---- 一組獨立的元素,通常這些元素都服從某種規則。 List 必須保持元素特定的順序,而 Set 不能有重複元素。

   Map---- 一組成對的“鍵值對”物件,即其元素是成對的物件,最典型的應用就是資料字典,並且還有其它廣泛的應用。另外, Map 可以返回其所有鍵組成的 Set 和其所有值組成的 Collection ,或其鍵值對組成的 Set ,並且還可以像陣列一樣擴充套件多維 Map ,只要讓 Map 中鍵值對的每個“值”是一個 Map 即可。

   一、迭代器

   迭代器是一種設計模式,它是一個物件,它可以遍歷並選擇序列中的物件,而開發人員不需要了解該序列的底層結構。迭代器通常被稱為“輕量級”物件,因為建立它的代價小。

   Java 中的 Iterator 功能比較簡單,並且只能單向移動:

   (1) 使用方法 iterator() 要求容器返回一個 Iterator 。第一次呼叫 Iterator next() 方法時,它返回序列的第一個元素。

   (2) 使用 next() 獲得序列中的下一個元素。

   (3) 使用 hasNext() 檢查序列中是否還有元素。

   (4) 使用 remove() 將迭代器新返回的元素刪除。

   Iterator Java 迭代器最簡單的實現,為 List 設計的 ListIterator 具有更多的功能,它可以從兩個方向遍歷 List ,也可以從 List 中插入和刪除元素。

   二、List 的功能方法

   List(interface): 次序是 List 最重要的特點 ; 它確保維護元素特定的順序。 List Collection 新增了許多方法,使得能夠向 List 中間插入與移除元素 ( 只推薦 LinkedList 使用 ) 。一個 List 可以生成 ListIterator ,使用它可以從兩個方向遍歷 List ,也可以從 List 中間插入和刪除元素。

   ArrayList: 由陣列實現的 List 。它允許對元素進行快速隨機訪問,但是向 List 中間插入與移除元素的速度很慢。 ListIterator 只應該用來由後向前遍歷 ArrayList ,而不是用來插入和刪除元素,因為這比 LinkedList 開銷要大很多。

   LinkedList: 對順序訪問進行了最佳化,向 List 中間插入與刪除得開銷不大,隨機訪問則相對較慢 ( 可用 ArrayList 代替 ) 。它具有方法 addFirst() addLast() getFirst() getLast() removeFirst() removeLast() ,這些方法 ( 沒有在任何介面或基類中定義過 ) 使得 LinkedList 可以當作堆疊、佇列和雙向佇列使用。

   三、Set 的功能方法

   Set(interface): 存入 Set 的每個元素必須是唯一的,因為 Set 不儲存重複元素。加入 Set Object 必須定義 equals() 方法以確保物件的唯一性。 Set Collection 有完全一樣的介面。 Set 介面不保證維護元素的次序。

   HashSet: 為快速查詢而設計的 Set 。存入 HashSet 的物件必須定義 hashCode()

   TreeSet: 保持次序的 Set ,底層為樹結構。使用它可以從 Set 中提取有序的序列。

   LinkedHashSet: 具有 HashSet 的查詢速度,且內部使用連結串列維護元素的順序 ( 插入的次序 ) 。於是在使用迭代器遍歷 Set 時,結果會按元素插入的次序顯示。

   HashSet 採用雜湊函式對元素進行排序,這是專門為快速查詢而設計的 ;TreeSet 採用紅黑樹的資料結構進行排序元素 ;LinkedHashSet 內部使用雜湊以加快查詢速度,同時使用連結串列維護元素的次序,使得看起來元素是以插入的順序儲存的。需要注意的是,生成自己的類時, Set 需要維護元素的儲存順序,因此要實現 Comparable 介面並定義 compareTo() 方法。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2708076/,如需轉載,請註明出處,否則將追究法律責任。

相關文章