Java集合框架
- Java集合類庫也將接口與實現implementation分離
- 集合類的基本接口是Collection接口,這個接口有兩個基本方法:boolean add(E element)和Iterator<E> Iterator()
- 迭代器Iterator接口包含4個方法:next(),hasNext(),remove(),forEachRemaining(Consumer<? super E> action);
- Collection接口擴展類Iterable接口。
- 元素被訪問的類型取決于集合類型
- Collection接口還聲明很多有用的方法;size(),isEmpty(),contains(),containsAll(),equals(),addAll(),remove(),removeAll(),clear(),retainAll(),toArray();
- 為了讓實現者更容易地實現Collection接口,類庫提供類一個類AbstractCollection
- 集合有兩個基本接口http://www.codes51.com/article/detail_358737.html
- 由于Map包含鍵值對,所以用put方法插入,用get方法讀取
- LIst是一個有序集合ordered Collection。元素會增加到容器中的特定位置。可以采用兩種方式訪問元素:使用迭代器訪問,或者使用一個整數索引來訪問。后一種方法被稱為隨機訪問random access ,因為這樣可以按任意順序訪問元素。與之不同,使用迭代器訪問時,必須順序地訪問元素。
- List接口定義了多個用于隨機訪問的方法:add(index,element);remove(index);get(index);get(index,element);
- Set接口等同于Collection接口。set的add方法不允許增加重復的元素。
具體的集合
ArrayList:一種可以動態增長和縮減的索引序列
LinkedList:一種可以在任何位置進行高效地插入和刪除操作的有序序列
ArrayDeque:一種用循環數組實現的雙端隊列
HashSet:一種沒有重復元素的無序集合
TreeSet:有序集
EnumSet:一種包含枚舉類型值的集
LinkedHashSet:一種可以記住元素插入次序的集
PriorityQueue:一種允許高效刪除最小元素的集合
HashMap:一種存儲鍵值關聯的數據結構
TreeMap:一種鍵值有序排列的映射表
EnumMap:一種鍵值屬于枚舉類型的映射表
LinkedHashMap:一種可以記住鍵值添加次序的映射表
WeakHashMap:一種其值無用武之地后可以被垃圾回收期回收的映射表
IdentityHashMap:一種用==而不是用equals比較鍵值的映射表
- 鏈表LinkedList是一種有序集合,每個對象的位置十分重要。
- ArrayList:List接口用于描述一個有序集合,并且集合中每個元素的位置十分重要。有兩種訪問元素的協議:一種是用迭代器,另一種是用get和set方法隨機地訪問每個元素。后者不適合LinkedList,但對數組卻很有用。ArrayList也實現類List接口,封裝了一個動態再分配的對象數組。
- 在不需要同步時使用ArrayList,而不要使用Vector
- HashSet
- TreeSet是一個有序集合,可以以任意順序將元素插入到集合中。在對集合進行遍歷時,每個值將自動地按照排序后的順序呈現。它的排序是用紅黑樹結構實現的。
- Deque,雙端隊列
- 優先級隊列priorityQueue:可以按任意順序插入,卻總是按照排序后的順序進行檢索,它使用的數據結構是堆heap。堆是一個可以自我調整的二叉樹。
映射
- 通常,我們知道某些鍵的信息,并想要查找與之對應的元素,Map數據結構為此設計。映射用來存放鍵值對,如果提供了鍵,就能夠查找到值。
- 散列映射對鍵進行散列,樹映射用鍵的整體順序對元素進行排序,并將其組織成搜索樹。散列和比較函數只能作用于鍵
- 與Set一樣,如果不需要按照排列順序訪問鍵,最好選擇HashMap,而不是TreeMap。
- 要想檢索一個對象,必須使用一個鍵
- 映射視圖view
- 弱散列映射WeakHashMap
- LinkedHashSet 和 LinkedHashMap用來記住插入元素項的順序
視圖與包裝器
- 輕量級集合包裝器
- 子范圍
- 不可修改的視圖unmodifiable views
- 同步視圖
- 受查視圖
算法
- 泛型集合接口有一個很大的優點,即算法只需要實現一次。
- 排序和混排
- 二分查找binarysearch
- 批操作
- 集合與數組的轉換
遺留的集合