Collection接口

概述:容器主要包括Collection和Map兩種,Collection存儲着單個對象的集合;而Map存儲着鍵值對(兩個對象key-->value)的映射表。

一、collection接口繼承樹:

說明:圖中的i:爲接口,c:爲類。

二、特點:

1、Collection接口,是存放一組單值的最大父接口,所謂的單值是指集合中的每個元素都是一個對象。在新的開發標準中已經很少直接使用此接口進行操作了。

  • List接口是Collection接口的子接口;此接口對Collection接口進行了大量的擴充,裏面的內容是允許重複的,有序存放的。
  • Set接口是Collection接口的子接口;Set沒有對Colletion接口進行擴充,裏面是不允許存放重複內容的,無序存放的;依靠Object類中的equals()和hashCode()方法來區分是否是同一個對象。
  • Queue隊列接口,此接口的子類可以實現隊列操作。

 

2、List接口

  • ArrayList:是List的子類,基於動態數組實現,支持隨機訪問;
  • Vector:是List的子類,功能和ArrayList類似;Vector是一個元老級的類,在JDK1.0時候就存在此類。在開發中ArrayList性能較高,屬於異步處理;而Vector性能較低,屬於同步處理。

                                                                            ArrayList和Vector類的主要區別

序號

比較點

ArrayList

Vector

1

推出時間

JDK1.2之後推出的,屬於新的操作類。

JDK1.0時推出,屬於舊操作類

2

性能

採用異步處理方式,性能更高

採用同步處理方式,性能較低

3

線程安全

屬於非線程安全的操作類

屬於線程安全的操作類

4

輸出

只能使用Iterator、foreach輸出

可以使用Iterator、foreach、Enumeration輸出

LinkedList:是List和Queue接口的實現類;基於雙向鏈表實現,只能順序訪問,但是可以快速地在鏈表中間插入和刪除元素;不僅如此,LinkedList還可以用作棧、隊列和雙向隊列。

 

3、Set接口

  • HashSet:基於哈希表實現,支持快速查找,但不支持有序性操作。並且失去了元素的插入順序信息,也就是說使用Iterator遍歷HashSet得到的結果是不確定的。
  • SortedSet:此接口主要用於排序操作,即實現此接口的子類都屬於排序的子類。
  • TreeSet:實現了SortedSet接口;基於紅黑樹實現,TreeSet的數據是有序存放的,支持有序性操作,例如根據一個範圍查找元素的操作。但是查找效率不如HashSet,HashSet的查找時間複雜度爲O(1),TreeSet則爲O(logN)。
  • LinkedHashSet:具有HashSet的查找效率,且內部使用雙向鏈表維護元素的插入順序。

 

4、Queue接口

  1. Queue用於模擬隊列這種數據結構,實現“FIFO”等數據結構。通常,隊列不允許隨機訪問隊列中的元素。
  2. Queue 接口並未定義阻塞隊列的方法,而這在併發編程中是很常見的。BlockingQueue 接口定義了那些等待元素出現或等待隊列中有可用空間的方法,這些方法擴展了此接口。
  3. Queue 實現通常不允許插入 null 元素,儘管某些實現(如 LinkedList)並不禁止插入 null。即使在允許 null 的實現中,也不應該將 null 插入到 Queue 中,因爲 null 也用作 poll 方法的一個特殊返回值,表明隊列不包含元素。
  • LinkedList:可以用它來實現雙向隊列;LinkedList類是List接口的實現類,同時它也實現了Deque接口。因此它也可以當做一個雙端隊列來用,也可以當作“棧”來使用。並且,它是以鏈表的形式來實現的,這樣的結果是它的隨機訪問集合中的元素時性能較差,但插入與刪除操作性能非常出色。
  • PriorityQueue:基於堆結構實現,可以用它來實現優先隊列。PriorityQueue保存隊列元素的順序並不是按照加入隊列的順序,而是按隊列元素的大小重新排序。當調用peek()或者是poll()方法時,返回的是隊列中最小的元素。當然你可以與TreeSet一樣,可以自定義排序。

三、各種線性表選擇策略

  1. 數組:是以一段連續內存保存數據的;隨機訪問是最快的,但不支持插入、刪除、迭代等操作。
  2. ArrayList與ArrayDeque:以數組實現;隨機訪問速度還行,插入、刪除、迭代操作速度一般;線程不安全。
  3. Vector:以數組實現;隨機訪問速度一般,插入、刪除、迭代速度不太好;線程安全的。
  4. LinkedList:以鏈表實現;隨機訪問速度不太好,插入、刪除、迭代速度非常快。  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章