【Java編程的邏輯】容器類的總結

抽象容器類

容器類體系與抽象容器類

用法和特點

容器類有兩個根接口,分別是CollectionMap ,Collection表示單個元素的集合,Map表示鍵值對的集合 。

Collection

Collection表示的數據集合有基本的增、刪、查、遍歷等方法,但沒有定義元素間的順序或位置,也沒有規定是否有重複元素。

List: 是Collection的子接口,表示有順序或位置的數據集合,增加了根據索引位置進行操作的方法,如:get(int index)。它有兩個主要的實現類:ArrayListLinkedList。ArrayList基於數組實現,LinkedList基於鏈表實現;ArrayList的隨機訪問效率很高,但從中間插入和刪除元素需要移動元素,效率較低,LinkedList則正好相反,隨機訪問效率很低,但增刪元素只需要調整鄰近節點的鏈接

Set: 是Collection的接口,沒有增加新的方法,但可以保證不包含重複元素。它有兩個主要的實現類HashSetTreeSet。HashSet基於哈希表實現,要求鍵重寫hashCode方法,效率更高,但元素間沒有順序;TreeSet基於排序二叉樹實現,元素按比較有序,元素需要實現Comparable接口,或者創建TreeSet時提供一個Comparator對象。HashSet還有一個子類LinkedHashSet可以按插入有序。

Queue: 是Collection的子接口,表示先進先出的隊列,在尾部添加,從頭部查看或刪除。Deque是Queue的子接口,表示更爲通過的雙端隊列,有明確的在頭或尾進行查看、添加和刪除的方法。普通隊列有兩個主要的實現類,LinkedListArrayDeque,LinkedList基於鏈表實現,ArrayDeque基於循環數組實現,一般而言,如果只需要Deque接口,ArrayDeque的效率更高一些。

Deque還有一個特殊的實現類PriorityQueue,它表示優先級隊列,內部是用實現的,堆除了用於實現優先級隊列,還可以高效方便的解決很多其他問題,比如求前K個最大的元素、求中值等。

Map

Map接口表示鍵值對集合,經常根據鍵進行操作,它有兩個主要的實現類,HashMap和TreeMap。HashMap基於哈希表實現,要求鍵重寫hashCode方法,操作效率很高,但元素沒有順序。TreeMap基於排序二叉樹實現,要求鍵實現Comparable接口,或提供一個Comparator對象,操作效率稍低,但可以按鍵有序。

HashMap還有一個子類LinkedHashMap,它可以按插入或訪問有序。之所以能有序,是因爲每個元素還加入到了一個雙向鏈表中。如果鍵本來就是有序的,使用LinkedHashMap而非TreeMap可以提高效率。按訪問有序的特點可以方便的用於實現LRU緩存。

小結

這裏寫圖片描述

發佈了98 篇原創文章 · 獲贊 97 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章