Java集合--概述
目錄
Java集合--概述
摘要
本文主要介紹集合的整體概念,並作為接下來Java集合實現類講解的索引。
圖示
這是在網上看到了這樣一張圖,感覺很清晰,內容也很全面,我決定按這張圖,把自己熟悉的集合都仔細研究一下。
各位置描述
位置 | 描述 |
---|---|
左上灰色部分 | 已經過期,以後的開發中不要使用。 |
右上淺粉色部分 | 介面關係圖 |
中間綠色部分 | java.util包裡集合具體實現類 |
右下灰色部分 | java.util.concurrent包裡面的類,用來處理java併發問題 |
集合分類
分類 | 描述 |
---|---|
Map | 雙鏈集合,允許通過鍵來找到值 |
List | 按照插入順序儲存元素 |
Set | 不允許有重複元素 |
Queue | 從一端插入元素,從另一端獲取 |
實現類
介面 | 實現類 |
---|---|
List | ArrayList、LinkedList |
Set | HashSet、LinkedHashSet、TreeSet |
Queue | PriorityQueue、LinkedList |
Map | HashMap、LinkedHashMap、TreeMap、WeakHashMap、IdentityHashMap |
底層資料結構
底層資料結構 | 實現類 |
---|---|
陣列 | EnumMap、ArrayList、ArrayQueue |
連結串列 | LinkedHashSet、LinkedList、LinkedHashMap |
紅黑樹 | TreeMap、TreeSet |
二叉堆 | PriorityQueue |
雜湊表 | HashMap、HashSet、LinkedHashMap、LinkedHashSet、WeakHashMap、IdentityHashMap |
正文
一、集合的由來
如果一個程式只包含固定數量且生命週期都是已知的物件,那麼這是一個非常簡單的程式
為了滿足常規的程式設計需要,我們要求能在任何時候,任何地點建立任意數量,甚至是不同型別的物件,由於陣列只能裝統一型別資料,而且長度固定,於是產生了集合。
二、集合特點
- 集合只能存放物件。基本資料型別會自動裝箱為包裝類。
- 集合存放的是物件的引用,物件本身還是放在堆記憶體中。
- 集合可以存放不同型別,不限數量的資料型別。
三、迭代器
使用集合必須對具體實現類進行操作,但是考慮如下狀況:如果原本是對List進行程式設計,現在要把相同的程式碼用在Set上,如果能不關心容器型別只關心對集合得操作該怎麼辦?於是,迭代器因此產生。
迭代器是一個物件,它的工作就是遍歷並選擇序列中的物件,而且客戶端不需要關注序列的底層結構,Java中Iterator只能單向移動,但是其子介面ListIterator可以雙向移動。
Iterator中有hashNext()
,next()
,remove()
幾個方法,ListIterator在它的基礎上又添加了三種方法,分別是 add()
,previous()
,hasPrevious()
。
Collection頂層結構介面是Iterable,而Map的頂層介面是Map,Collection下的集合都可以用迭代器遍歷,Map可以使用Set<Map.Entry<K, V>> entrySet()
方法轉換為Set進行迭代遍歷。
Iterable中包含Iterator<T> iterator()
方法,Collection下集合使用該方法後會返回迭代器,可對迭代器進行迭代遍歷。
通常來講有序的集合中有Iterator<T> iterator()
和ListIterator<E> listIterator()
方法,可以進行雙向遍歷,無序的集合中有Iterator<T> iterator()
,只能向後遍歷。
四、實現自己的集合
如果想實現自己的集合可以JDK提供的抽象類,如AbstractList,AbstractMap,通常這些抽象類已經為我們提供了現成的實現,可以根據需要對特定的抽象方法重寫,直接實現List、Map這樣的介面是需要實現所有方法工作量過大。
不過通常來講,java已經提供提供了豐富的集合實現,很少會需要我們自己去實現集合。
本文參考: