前言
- 在
Java
中,集合的使用可謂是重中之重 - 本文將獻上一份 全面 & 詳細的
Java
集合學(xué)習(xí)攻略,希望您們會喜歡。
目錄
1. 簡介
2. 與數(shù)組的區(qū)別
Java
集合 與 常用數(shù)組的區(qū)別如下:
3. 集合類型
Java
集合的類型可分為Set
、List
、Map
、Queue
4種具體介紹如下
下面會更加詳細地說明
4. 集合繼承關(guān)系
-
Java
集合的根接口 =Collection
接口 +Map
接口
即
Java
的集合類都實現(xiàn)上述2個接口
其中:
-
List
、Set
、Queue
實現(xiàn)了Collection
接口。繼承關(guān)系如下:
-
Map
實現(xiàn)了Map
接口 。繼承關(guān)系如下:
下面,我將主要介紹 Collection
接口 、Map
接口 & 其具體集合實現(xiàn)類
5. Collection相關(guān)
在本節(jié)中,會先介紹Collection
接口,再介紹其具體集合實現(xiàn)類(List
、Set
、Queue
類)
5.1 Collection 接口
定義
一個接口,是集合List
、Set
、Queue
容器的頂層父接口包結(jié)構(gòu)
- 接口中定義的方法
主要用于 添加元素、刪除元素 等等
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所有元素復(fù)制到另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
// 時間復(fù)雜度分析
// 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
)。具體介紹如下
至此,關(guān)于Collection
接口、其具體集合實現(xiàn)類(List
、Set
、Queue
類)講解完畢。總結(jié)如下
6. Map 相關(guān)
在本節(jié)中,會先介紹Map
接口,再介紹其具體集合實現(xiàn)類中最常見的HashMap
、LinkedHashMap
、TreeMap
6.1 Map 接口
- 簡介
注:
Map
接口 與Collection
接口無關(guān)
- 包結(jié)構(gòu)
// 為了更好理解各類的關(guān)系,下面附上:各類的定義圖
// 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); // 刪除該映射關(guān)系
V get(Object key); // 獲得指定鍵的值
V put(K key, V value); // 添加鍵值關(guān)系
void putAll(Map<? extends K, ? extends V> m); // 將指定Map中的映射關(guān)系 復(fù)制到 此Map中
boolean containsKey(Object key); // 若存在該鍵的映射關(guān)系,則返回true
boolean containsValue(Object value); // 若存在該值的映射關(guān)系,則返回true
void clear(); // 清除所有映射關(guān)系
int size(); // 返回鍵值關(guān)系的數(shù)量
boolean isEmpty(); // 若未包含鍵值關(guān)系,則返回true
// Map中還包括1個內(nèi)部類:Entry
// 該類封裝了一個key-value對
// Entry類包含如下方法:
boolean equals(Object o );// 比較指定對象 與 此項 的相等性
K getKey();// 返回 與 此項 對應(yīng)的鍵
V getValue();// 返回 與 此項 對應(yīng)的值
int hashCode();// 返回此映射項的哈希值
V setValue(V value) ;// 使用指定值替換 與 此項對應(yīng)的值
- 與
Set
集合、List
集合的關(guān)系
下面,我將介紹其具體集合實現(xiàn)類中最常見的HashMap
、LinkedHashMap
、TreeMap
6.2 HashMap
- 類定義
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
- 主要介紹
關(guān)于其更加具體介紹 & 源碼分析,請看文章:
注:
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>{}
- 簡介
- 具體介紹
關(guān)于更多LinkedHashMap的具體介紹 & 源碼分析,請看文章
6.4 TreeMap
- 類定義
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable{}
- 簡介
- 關(guān)于排序方式 & 判斷相等的標準
6.5 相關(guān)子類比較
-
HashMap
、LinkedHashMap
、TreeMap
的區(qū)別
示意圖 HashMap
、Hashtable
的區(qū)別
-
HashMap
、ConcurrentHashMap
的區(qū)別
至此,關(guān)于Java
集合的相關(guān)內(nèi)容(Colletcion
、Map
接口 & 其相關(guān)實現(xiàn)子類)講解完畢。
7. 總結(jié)
本文主要講解了Java
集合的相關(guān)內(nèi)容,包括Colletcion
接口、Map
接口 & 其相關(guān)實現(xiàn)子類),具體總結(jié)如下:
Carson帶你學(xué)Android系列文章
Carson帶你學(xué)Android:學(xué)習(xí)方法
Carson帶你學(xué)Android:四大組件
Carson帶你學(xué)Android:自定義View
Carson帶你學(xué)Android:異步-多線程
Carson帶你學(xué)Android:性能優(yōu)化
Carson帶你學(xué)Android:動畫
歡迎關(guān)注Carson_Ho的簡書!
分享Android技術(shù)干貨,追求短、平、快,但卻不缺深度。