1.1 JAVA集合
Java 集合框架
集合框架被設計成要滿足以下幾個目標。
- 該框架必須是高性能的。基本集合(動態數組,鏈表,樹,哈希表)的實現也必須是高效的。
- 該框架允許不同類型的集合,以類似的方式工作,具有高度的互操作性。
- 對一個集合的擴展和適應必須是簡單的。
從下面面的集合框架圖可以看到,Java 集合框架主要包括兩種類型的容器,
- 一種是集合(Collection),存儲一個元素集合,
- 另一種是圖(Map),存儲鍵/值對映射。
在編程時,可以使用數組來保存多個對象,但數組長度不可變化,一旦在初始化數組時指定了數組長度,這個數組長度就是不可變的。如果需要保存數量變化的數據,數組就有點無能為力了。
為了保存數量不確定的數據,以及保存具有映射關系的數據(也被稱為關聯數組),Java 提供了集合類。集合類主要負責保存、盛裝其他數據,因此集合類也被稱為容器類。Java 所有的集合類都位于 java.util 包下,提供了一個表示和操作對象集合的統一構架,包含大量集合接口,以及這些接口的實現類和操作它們的算法。
集合類和數組不一樣,數組元素既可以是基本類型的值,也可以是對象(實際上保存的是對象的引用變量),而集合里只能保存對象(實際上只是保存對象的引用變量,但通常習慣上認為集合里保存的是對象)。
Java 集合類型分為 Collection 和 Map,它們是 Java 集合的根接口,這兩個接口又包含了一些子接口或實現類。圖 1 和圖 2 分別為 Collection 和 Map 的子接口及其實現類。
Collection 接口又有 3 種子類型,List、Set 和 Queue,再下面是一些抽象類,最后是具體實現類,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
集合框架是一個用來代表和操縱集合的統一架構。所有的集合框架都包含如下內容:
- 接口:是代表集合的抽象數據類型。例如 Collection、List、Set、Map
等。之所以定義多個接口,是為了以不同的方式操作集合對象 - 實現(類):是集合接口的具體實現。從本質上講,它們是可重復使用的數據結構,例如:ArrayList、LinkedList、HashSet、HashMap。
- 算法:是實現集合接口的對象里的方法執行的一些有用的計算,例如:搜索和排序。這些算法被稱為多態,那是因為相同的方法可以在相似的接口上有著不同的實現。
除了集合,該框架也定義了幾個 Map 接口和類。Map 里存儲的是鍵/值對。盡管 Map 不是集合,但是它們完全整合在集合中。
集合接口
| Iterator 接口 | 集合的輸出接口,主要用于遍歷輸出(即迭代訪問)Collection 集合中的元素,Iterator 對象被稱之為迭代器。迭代器接口是集合接口的父接口,實現類實現 Collection 時就必須實現 Iterator 接口。 |
| Collection 接口 | 是 List、Set 和 Queue 的父接口,是存放一組單值的最大接口。所謂的單值是指集合中的每個元素都是一個對象。一般很少直接使用此接口直接操作。 |
| Queue 接口 | Queue 是 Java 提供的隊列實現,有點類似于 List。 |
| Dueue 接口 | 是 Queue 的一個子接口,為雙向隊列。 |
| List 接口 | 是最常用的接口。是有序集合,允許有相同的元素。使用 List 能夠精確地控制每個元素插入的位置,用戶能夠使用索引(元素在 List 中的位置,類似于數組下標)來訪問 List 中的元素,與數組類似。 |
| Set 接口 | 不能包含重復的元素。 |
| Map 接口 | 是存放一對值的最大接口,即接口中的每個元素都是一對,以 key?value 的形式保存。 |
Java集合實現類的作用
| HashSet | 為優化査詢速度而設計的 Set。它是基于 HashMap 實現的,HashSet 底層使用 HashMap 來保存所有元素,實現比較簡單 |
| TreeSet | 實現了 Set 接口,是一個有序的 Set,這樣就能從 Set 里面提取一個有序序列 |
| ArrayList | 一個用數組實現的 List,能進行快速的隨機訪問,效率高而且實現了可變大小的數組 |
| ArrayDueue | 是一個基于數組實現的雙端隊列,按“先進先出”的方式操作集合元素 |
| LinkedList | 對順序訪問進行了優化,但隨機訪問的速度相對較慢。此外它還有 addFirst()、addLast()、getFirst()、getLast()、removeFirst() 和 removeLast() 等方法,能把它當成棧(Stack)或隊列(Queue)來用 |
| HsahMap | 按哈希算法來存取鍵對象 |
| TreeMap | 可以對鍵對象進行排序 |
Set和List的區別
Set 接口實例存儲的是無序的,不重復的數據。List 接口實例存儲的是有序的,可以重復的元素。
Set檢索效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變 <實現類有HashSet,TreeSet>。
List和數組類似,可以動態增長,根據實際存儲的數據的長度自動增長List的長度。查找元素效率高,插入刪除效率低,因為會引起其他元素位置改變 <實現類有ArrayList,LinkedList,Vector> 。
總結
以上是生活随笔為你收集整理的1.1 JAVA集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.2 Collection接口
- 下一篇: 1.3 List集合:ArrayList