文章插圖

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