Java:那些關於集合的知識都在這裡了!
阿新 • • 發佈:2018-12-22
前言
- 在
Java
中,集合的使用可謂是重中之重 - 本文將獻上一份 全面 & 詳細的
Java
集合學習攻略,希望您們會喜歡。
目錄
1. 簡介
2. 與陣列的區別
Java
集合 與 常用陣列的區別如下:
3. 集合型別
Java
集合的型別可分為Set
、List
、Map
、Queue
4種- 具體介紹如下
下面會更加詳細地說明
4. 集合繼承關係
Java
集合的根介面 =Collection
介面 +Map
介面
即
Java
的集合類都實現上述2個介面
其中:
List
、Set
、Queue
實現了Collection
介面。繼承關係如下:
Map
實現了Map
介面 。繼承關係如下:
下面,我將主要介紹 Collection
介面 、Map
介面 & 其具體集合實現類
5. Collection相關
在本節中,會先介紹Collection
介面,再介紹其具體集合實現類(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個數組,該陣列包含集合中的所有元素 Iterator iterator(); // 返回1個Iterator物件:用於遍歷集合中的元素 Boolean isEmpty();// 判斷集合是否為空 Int size();// 返回集合中元素的數目 Boolean equals(Object o); // 物件比較 Int hashCode() ;// 返回hash碼
- 與
Collections
的區別
附: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轉為執行緒安全的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`介面的實現類
List list = new ArrayList();
list.add(XXX);
//···
list.add(XXX);
Collectoions.sort(list);
Collections
與Arrays
的區別
下面,我將介紹其具體集合實現類: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(); // 判斷集合是否為空
- 集合實現類
List
的集合實現類主要包括:Vector
、ArrayList
、LinkedList
、Stack
。具體介紹如下
Vector
、ArrayList
、LinkedList
之間的區別
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個數組,該陣列包含集合中的所有元素
void clear(); // 清空集合
int size(); // 獲得集合長度
boolean isEmpty(); // 判斷集合是否為空
- 集合實現類
Set
的集合實現類主要包括: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()在失敗時會丟擲異常
- 集合實現類
Queue
的集合實現類主要包括:PriorityQueue
、Dueue
(ArrayDeque
、LinkedList
)、PriorityQueue
(ArrayBlockingQueue
、LinkedBlockingQueue
)。具體介紹如下
至此,關於Collection
介面、其具體集合實現類(List
、Set
、Queue
類)講解完畢。總結如下
6. Map 相關
在本節中,會先介紹Map
介面,再介紹其具體集合實現類中最常見的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(); // 返回鍵值關係的數量
boolean isEmpty(); // 若未包含鍵值關係,則返回true
// Map中還包括1個內部類:Entry
// 該類封裝了一個key-value對
// Entry類包含如下方法:
boolean equals(Object o );// 比較指定物件 與 此項 的相等性
K getKey();// 返回 與 此項 對應的鍵
V getValue();// 返回 與 此項 對應的值
int hashCode();// 返回此對映項的雜湊值
V setValue(V value) ;// 使用指定值替換 與 此項對應的值
- 與
Set
集合、List
集合的關係
下面,我將介紹其具體集合實現類中最常見的HashMap
、LinkedHashMap
、TreeMap
6.2 HashMap
- 類定義
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
- 主要介紹
關於其更加具體介紹 & 原始碼分析,請看文章:
注:
HashMap
的實現在JDK 1.7
和JDK 1.8
差別較大,建議一同檢視
6.3 LinkedHashMap
- 類定義
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>{}
- 簡介
- 具體介紹
關於更多LinkedHashMap的具體介紹 & 原始碼分析,請看文章: - Java:手把手帶你原始碼分析 HashMap 1.7
- Java原始碼分析:關於 HashMap 1.8 的重大更新
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
的區別
HashMap
、Hashtable
的區別
至此,關於Java
集合的相關內容(Colletcion
、Map
介面 & 其相關實現子類)講解完畢。
7. 總結
- 本文主要講解了
Java
集合的相關內容,包括Colletcion
介面、Map
介面 & 其相關實現子類),具體總結如下:
- 下面我將繼續對
Android & Java
中的知識進行深入講解 ,有興趣可以繼續關注Carson_Ho的安卓開發筆記
本文原文地址:https://blog.csdn.net/carson_ho/article/details/85043628