在編程時,可以使用數組來保存多個對象,但數組長度不可變化,一旦在初始化數組時指定了數組長度,這個數組長度就是不可變的。如果需要保存數量變化的數據,數組就有點無能為力了。而且數組無法保存具有映射關係的數據,如成績表為語文——79,數學——80,這種數據看上去像兩個數組,但這兩個數組的元素之間有一定的關聯關係。
為了保存數量不確定的數據,以及保存具有映射關係的數據(也被稱為關聯數組),Java提供了集合類。集合類主要負責保存、盛裝其他數據,因此集合類也被稱為容器類。Java所有的集合類都位於java.util包下,提供了一個表示和操作對象集合的統一構架,包含大量集合接口,以及這些接口的實現類和操作它們的算法。
集合類和數組不一樣,數組元素既可以是基本類型的值,也可以是對象(實際上保存的是對象的引用變量),而集合里只能保存對象(實際上只是保存對象的引用變量,但通常習慣上認為集合里保存的是對象)。
Java集合類型分為Collection和Map,它們是Java集合的根接口,這兩個接口又包含了一些子接口或實現類。圖1和圖2分別為Collection和Map的子接口及其實現類。

Map接口結構

在圖1和圖2中,黃色塊為集合的接口,藍色塊為集合的實現類。表1介紹了這些接口的作用。
表1Java集合接口的作用
| 接口名稱 | 作 用 |
| Iterator 接口 | 集合的輸出接口,主要用於遍歷輸出(即迭代訪問)Collection 集合中的元素,Iterator 對象被稱之為迭代器。迭代器接口是集合接口的父接口,實現類實現 Collection 時就必須實現 Iterator 接口。 |
| Collection 接口 | 是 List、Set 和 Queue 的父接口,是存放一組單值的最大接口。所謂的單值是指集合中的每個元素都是一個對象。一般很少直接使用此接口直接操作。 |
| Queue 接口 | Queue 是 Java 提供的隊列實現,有點類似於 List。 |
| Dueue 接口 | 是 Queue 的一個子接口,為雙向隊列。 |
| List 接口 | 是最常用的接口。是有序集合,允許有相同的元素。使用 List 能夠精確地控制每個元素插入的位置,用戶能夠使用索引(元素在 List 中的位置,類似於數組下標)來訪問 List 中的元素,與數組類似。 |
| Set 接口 | 不能包含重複的元素。 |
| Map 接口 | 是存放一對值的最大接口,即接口中的每個元素都是一對,以 key➡value 的形式保存。 |
對於Set、List、Queue和Map這4種集合,Java最常用的實現類分別是HashSet、TreeSet、ArrayList、ArrayDueue、LinkedList和HashMap、TreeMap等。表2介紹了集合中這些常用的實現類。
表2Java集合實現類的作用
| 類名稱 | 作用 |
| HashSet | 為優化査詢速度而設計的 Set。它是基於 HashMap 實現的,HashSet 底層使用 HashMap 來保存所有元素,實現比較簡單 |
| TreeSet | 實現了 Set 接口,是一個有序的 Set,這樣就能從 Set 裏面提取一個有序序列 |
| ArrayList | 一個用數組實現的 List,能進行快速的隨機訪問,效率高而且實現了可變大小的數組 |
| ArrayDueue | 是一個基於數組實現的雙端隊列,按「先進先出」的方式操作集合元素 |
| LinkedList | 對順序訪問進行了優化,但隨機訪問的速度相對較慢。此外它還有 addFirst()、addLast()、getFirst()、getLast()、removeFirst() 和 removeLast() 等方法,能把它當成棧(Stack)或隊列(Queue)來用 |
| HsahMap | 按哈希算法來存取鍵對象 |
| TreeMap | 可以對鍵對象進行排序 |
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/229563.html
微信掃一掃
支付寶掃一掃