
前言
- 在
Java中,集合的使用可謂是重中之重 - 本文將獻上一份 全面 & 詳細的
Java集合學習攻略,希望您們會喜歡。
目錄

1. 簡介

2. 與數(shù)組的區(qū)別
Java集合 與 常用數(shù)組的區(qū)別如下:

3. 集合類型
Java集合的類型可分為Set、List、Map、Queue4種具體介紹如下

下面會更加詳細地說明
4. 集合繼承關系
-
Java集合的根接口 =Collection接口 +Map接口
即
Java的集合類都實現(xiàn)上述2個接口
其中:
-
List、Set、Queue實現(xiàn)了Collection接口。繼承關系如下:

-
Map實現(xiàn)了Map接口 。繼承關系如下:

下面,我將主要介紹 Collection接口 、Map接口 & 其具體集合實現(xiàn)類
5. Collection相關
在本節(jié)中,會先介紹Collection接口,再介紹其具體集合實現(xiàn)類(List、Set、Queue類)
5.1 Collection 接口
定義
一個接口,是集合List、Set、Queue容器的頂層父接口包結構

- 接口中定義的方法
主要用于 添加元素、刪除元素 等等
Boolean add(Object o); // 向集合中添加一個對象的引用
Boolean remove(Object o); // 從集合中刪除一個對象的引用
Void clear();// 刪除集合中的所有對象,即不再持有這些對象的引用
Boolean contains(Object o);// 判斷在集合中是否持有特定對象
Object[] toArray();// 返回1個數(shù)組,該數(shù)組包含集合中的所有元素
Iterator iterator(); // 返回1個Iterator對象:用于遍歷集合中的元素
Boolean isEmpty();// 判斷集合是否為空
Int size();// 返回集合中元素的數(shù)目
Boolean equals(Object o); // 對象比較
Int hashCode() ;// 返回hash碼
- 與
Collections的區(qū)別

附:Collections的使用
// 主要功能有:搜索元素、獲取最大最小值、排序集合、對象線程安全化、將1個List所有元素復制到另1個 等
// 1. 獲取最大最小值
static T max(Collection<? extends T> coll, Comparator<? super T> comp);
static T min(Collection<? extends T> coll, Comparator<? super T> comp);
// 2. 排序
static void sort(List<T> list, Comparator<? super T> c);
// 3. 將線程不安全的Collection轉(zhuǎn)為線程安全的Collection
static Collection<T> synchronizedCollection(Collection<T> c);
static List<T> synchronizedList(List<T> list);
static Map<K,V> synchronizedMap(Map<K,V> m);
static Set<T> synchronizedSet(Set<T> s);
// 交換指定位置的兩個元素
static void swap(List<?> list, int i, int j)
// 主要操作對象 = 集合類 = `Collection`接口的實現(xiàn)類
List list = new ArrayList();
list.add(XXX);
//···
list.add(XXX);
Collectoions.sort(list);
-
Collections與Arrays的區(qū)別

下面,我將介紹其具體集合實現(xiàn)類:List、Set、Queue
5.2 List 集合
- 簡介

- 使用方法
void add(int index, Object element); // 將元素elment插入在集合list的index處
boolean addAll(Collection<? extends E> c); // 將集合c 中的所有元素都插入到列表中的指定位置index處
E set(int index, E element); // 將集合中index索引處的元素替換成element
Object get(int index); // 返回List集合index索引處的元素
Int indexOf(Object o) ;// 返回集合中元素o的index索引
int lastIndexOf(Object o); // 返回集合中最后一個元素的索引
List subList(int fromIndex,int toIndex);// 返回集合中從索引fromIndex到toIndex索引處的元素集合
Object remove(int index);// 刪除集合index索引處的元素
void clear(); // 清空集合
int size(); // 獲得集合長度
boolean isEmpty(); // 判斷集合是否為空
- 集合實現(xiàn)類
List的集合實現(xiàn)類主要包括:Vector、ArrayList、LinkedList、Stack。具體介紹如下

-
Vector、ArrayList、LinkedList之間的區(qū)別

5.3 Set 集合
- 簡介

- 使用方法
boolean add(E e); // 添加元素
boolean remove(Object o); // 刪除元素
boolean addAll(Collection<? extends E> c); // 插入集合c 中的所有元素到集合中
boolean removeAll(Collection<?> c); // 移除原集合中的集合c中的元素
boolean contains(Object o); // 判斷是否包含該元素
boolean containsAll(Collection<?> c); // 判斷是否包含該集合中的元素
Object[] toArray(); // 返回1個數(shù)組,該數(shù)組包含集合中的所有元素
void clear(); // 清空集合
int size(); // 獲得集合長度
boolean isEmpty(); // 判斷集合是否為空
- 集合實現(xiàn)類
Set的集合實現(xiàn)類主要包括:TreeSet、HashSet(LinkedHashSet)、EnumSet。具體介紹如下

5.4 Queue 集合
- 簡介

- 使用方法
//插入新元素到隊列:插入成功則返回true; 若隊列已滿,拋出IllegalStateException異常
boolean add(E e);
//插入新元素到隊列,若插入成功則返回true ;若隊列已滿,返回false,但不拋出異常
boolean offer(E e);
E remove(); // 返回第1個元素 & 從隊列中刪除;若隊列為空,拋出異常
E poll(); // 返回第1個元素 & 從隊列中刪除 ;若隊列為空,返回null,但不拋出異常
E element(); //返回的第1個元素 & 不從隊列中刪除;若隊列為空,則拋異常
E peek(); // 返回第1元素 & 不從隊列中刪除;若隊列為空,則返回null
// 時間復雜度分析
// 1. 插入方法:offer()、poll()、remove() 、add ()= O(log(n))
// 2. 刪除方法:remove() 、 contains() = O(n)
// 3. 檢索方法:peek()、element() 、size() = O(1)
// 使用建議
// 1. 遍歷時,若使用但不需刪除元素,使用element()、peek()(時間效率高)
// 2. 使用offer()加入元素、poll()取出元素
// a. 避免使用Collection的add() 、remove()
// b. 原因 = 通過返回值可判斷成功與否,但add()、remove()在失敗時會拋出異常
- 集合實現(xiàn)類
Queue的集合實現(xiàn)類主要包括:PriorityQueue、Dueue(ArrayDeque、LinkedList)、PriorityQueue(ArrayBlockingQueue、LinkedBlockingQueue)。具體介紹如下

至此,關于Collection接口、其具體集合實現(xiàn)類(List、Set、Queue類)講解完畢??偨Y如下

6. Map 相關
在本節(jié)中,會先介紹Map接口,再介紹其具體集合實現(xiàn)類中最常見的HashMap、LinkedHashMap、TreeMap
6.1 Map 接口
- 簡介

注:
Map接口 與Collection接口無關
- 包結構

// 為了更好理解各類的關系,下面附上:各類的定義圖
// HashMap
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable{}
// LinkedHashMap
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>{}
// TreeMap
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable{}
// Hashtable
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable {}
// ConcurrentHashMap
public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>
implements ConcurrentMap<K, V>, Serializable {}
- 接口中定義的方法
Set<K> keySet(); // 單獨抽取key序列,將所有key生成一個Set
Collection<V> values(); // 單獨value序列,將所有value生成一個Collection
V remove(Object key); // 刪除該映射關系
V get(Object key); // 獲得指定鍵的值
V put(K key, V value); // 添加鍵值關系
void putAll(Map<? extends K, ? extends V> m); // 將指定Map中的映射關系 復制到 此Map中
boolean containsKey(Object key); // 若存在該鍵的映射關系,則返回true
boolean containsValue(Object value); // 若存在該值的映射關系,則返回true
void clear(); // 清除所有映射關系
int size(); // 返回鍵值關系的數(shù)量
boolean isEmpty(); // 若未包含鍵值關系,則返回true
// Map中還包括1個內(nèi)部類:Entry
// 該類封裝了一個key-value對
// Entry類包含如下方法:
boolean equals(Object o );// 比較指定對象 與 此項 的相等性
K getKey();// 返回 與 此項 對應的鍵
V getValue();// 返回 與 此項 對應的值
int hashCode();// 返回此映射項的哈希值
V setValue(V value) ;// 使用指定值替換 與 此項對應的值
- 與
Set集合、List集合的關系

下面,我將介紹其具體集合實現(xiàn)類中最常見的HashMap、LinkedHashMap、TreeMap
6.2 HashMap
- 類定義
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
- 主要介紹

關于其更加具體介紹 & 源碼分析,請看文章:
注:
HashMap的實現(xiàn)在JDK 1.7和JDK 1.8差別較大,建議一同查看
6.3 LinkedHashMap
- 類定義
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>{}
- 簡介

- 具體介紹
關于更多LinkedHashMap的具體介紹 & 源碼分析,請看文章
6.4 TreeMap
- 類定義
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable{}
- 簡介

- 關于排序方式 & 判斷相等的標準

6.5 相關子類比較
-
HashMap、LinkedHashMap、TreeMap的區(qū)別
示意圖 HashMap、Hashtable的區(qū)別

-
HashMap、ConcurrentHashMap的區(qū)別

至此,關于Java集合的相關內(nèi)容(Colletcion 、Map接口 & 其相關實現(xiàn)子類)講解完畢。
7. 總結
本文主要講解了Java集合的相關內(nèi)容,包括Colletcion 接口、Map接口 & 其相關實現(xiàn)子類),具體總結如下:

Carson帶你學Android系列文章
Carson帶你學Android:學習方法
Carson帶你學Android:四大組件
Carson帶你學Android:自定義View
Carson帶你學Android:異步-多線程
Carson帶你學Android:性能優(yōu)化
Carson帶你學Android:動畫
歡迎關注Carson_Ho的簡書!
分享Android技術干貨,追求短、平、快,但卻不缺深度。

