(本文爲博主JAVA課程學習總結)
一.集合框架介紹
集合框架:用來表示和操作集合的統一的架構。
集合類存放java.util包中。
較重要的幾個集合類與相關接口:Iterable(迭代器接口)、Collection(類集接口)、List(列表接口)、Set(數據集接口)、Queue(隊列)、Map(鍵-值對組合映射表)
層次結構圖(這張圖片很重要,箭頭指向父類):
(源自海同網校)
(一)Iterable接口
通過Iterable接口可以實現“foreach”語句(增強for循環),即:
Iterator:迭代器類,是Iterable接口中的方法,也作爲另一個接口存在。Iterable接口的Iterator方法是返回一個迭代器(即Iterator對象)。而Iterator接口中的方法實現依賴於迭代器的當前迭代位置。二者不同,具體可查看API文檔。
通過Iterator迭代器實現ArrayList的元素遍歷:
Listiterator:是Iterator的子類,允許雙向遍歷集合並修改和刪除元素。
(二)Collection接口
Collection接口是層次結構中的根接口。
Collection接口定義的方法:int size(),boolean isEmpty(),boolean contains(Object o)……(具體可參照API說明文檔)
(三)List、Set、Map接口
List接口:對Collection接口的擴展,有序且可重複。
Set接口:對Collection接口的擴展,無序且不可重複。
Map(映射)接口:存儲關鍵字-值對的對象(簡稱鍵值對)。當給定一個關鍵字時,可查詢得到它的值。這裏關鍵字和值都可以是對象。
注意:Map不是Collection的子接口,故無法採用迭代器遍歷。
二.List容器
List容器中,有些類似於數組,可以直接通過元素在列表中的位置來訪問元素。
(一)ArrayList —— 動態數組
ArrayList常用方法:
E get(int index) 返回列表中指定位置上的元素(E爲ArrayList中的類型參數)
int indexOf(Object o) 返回此列表中首次出現指定元素的索引,若不包含則返回-1。
具體可查看API文檔。
優點:ArrayList查詢效率較高。且ArrayList的實現是不同步的,所以在單線程中效率較高。
缺點:插入、刪除效率低。
(二)LinkedList —— 鏈表
常用方法:
void addFirst(E e) 將指定元素插入此列表的開頭。
E removeFirst() 移除並返回此列表的第一個元素。
LinkedList繼承了Deque(Queue的子類),故具有雙向隊列的一些特有性質。
優點:做插入、刪除效率較高。
缺點:查詢效率低。
三.Map容器
Map容器中的鍵(key)必須是唯一的,值(value)是可以重複的。
注:有些映射可以接收null鍵與null值,而有些不行。
支持映射的接口:Map、Map.Entry、SortedMap。
常用方法:int size()、boolean isEmpty()、boolean containsKey(Object key)、boolean containsValue(Object value)、V get(Object key)、V put(K key, V value)、Set<Map.Entry<K,V>>entrySet()(返回包含映射關係的Set視圖)……
具體可參照API說明文檔
(一)Map.Entry接口
Map.Entry接口類似於Iterator接口,表示的是鍵值對(映射項),它是Map接口的內部接口。
(二)HashMap
HashMap類是基於哈希表的Mao接口實現。(允許使用null鍵和null值)
注:HashMap不保證映射的順序。
構造方法與常用方法可參照API文檔。
Hashtable是HashMap的前身。
設計Hashode()方法時,最好讓不相等的對象生成不同的整數結果。(如果編程者對HashCode方法有特定要求,可進行重寫。)
四.Set容器
Set容器是一個不包含重複元素的Collection,最多包含一個null元素。Set容器無法保證元素順序。
(一)HashSet
HashSet使用哈希表進行存儲。
HashSet中的方法全部繼承自父類和接口。
HashSet實際上是HashMap的一個實例,HashSet的內部操作底層數據是HashMap的key。
(二)TreeSet
TreeSet:通過使用樹來進行對Set中的對象進行升序存儲。(是TreeMap的一個實例,TreeSet的內部操作底層數據是TreeMap的key)
優點:訪問和檢索速度很快,適用於存儲大量需要快速檢索的排序信息。
五.Collections類
Collections類中包含了若干類集和映射的算法,也就是說Collections類是爲上述的幾種特殊的類集和映射服務的,我們可以通過調用Collections類來實現對數據的排序處理等。
常用方法:
public static int binarySearch(List<T> list, T key)
使用二分搜索法搜索指定列表,以獲得指定對象。
public static void reverse(List<?> list)
反轉指定列表中元素的順序。
public static void shuffle(List<?> list)
打亂指定列表中元素的順序。
……(具體可查看API文檔)