1. 程式人生 > >Java:那些關於集合的知識都在這裡了!

Java:那些關於集合的知識都在這裡了!

前言

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

 目錄

 


1. 簡介 

 


2. 與陣列的區別

Java集合 與 常用陣列的區別如下:

 


 

3. 集合型別

  • Java集合的型別可分為SetListMapQueue 4種
  • 具體介紹如下

 

 下面會更加詳細地說明

 

4. 集合繼承關係

  • Java集合的根介面 = Collection介面 + Map介面

即 Java的集合類都實現上述2個介面

其中:

  • ListSetQueue實現了 Collection介面。繼承關係如下:

 

  • Map 實現了 Map介面 。繼承關係如下:

 

 下面,我將主要介紹 Collection介面 、Map介面 & 其具體集合實現類


5. Collection相關

在本節中,會先介紹Collection

介面,再介紹其具體集合實現類(ListSetQueue類)

5.1 Collection 介面

  • 定義

       一個介面,是集合ListSetQueue容器的頂層父介面

  • 包結構

 

  • 介面中定義的方法
    主要用於 新增元素、刪除元素 等等 
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 的區別

 

 

 

下面,我將介紹其具體集合實現類:ListSetQueue

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的集合實現類主要包括:VectorArrayListLinkedListStack。具體介紹如下

 

 

  • VectorArrayListLinkedList之間的區別

 

 

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的集合實現類主要包括:TreeSetHashSetLinkedHashSet)、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的集合實現類主要包括:PriorityQueueDueueArrayDequeLinkedList)、PriorityQueueArrayBlockingQueueLinkedBlockingQueue)。具體介紹如下

 

 

 至此,關於Collection介面、其具體集合實現類(ListSetQueue類)講解完畢。總結如下

 


6. Map 相關

在本節中,會先介紹Map介面,再介紹其具體集合實現類中最常見的HashMapLinkedHashMapTreeMap

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集合的關係

 

 

下面,我將介紹其具體集合實現類中最常見的HashMapLinkedHashMapTreeMap

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>{}

 

 

 

 

6.4 TreeMap

  • 類定義 
public class TreeMap<K,V> 
    extends AbstractMap<K,V> 
    implements NavigableMap<K,V>, Cloneable, java.io.Serializable{} 

 

 

 

  • 簡介
  • 關於排序方式 & 判斷相等的標準

 

 

6.5 相關子類比較

  • HashMap 、LinkedHashMapTreeMap的區別

 

 

  • HashMap  Hashtable 的區別

 至此,關於Java集合的相關內容(Colletcion 、Map介面 & 其相關實現子類)講解完畢。

 

7. 總結

  • 本文主要講解了Java集合的相關內容,包括Colletcion 介面、Map介面 & 其相關實現子類),具體總結如下:

 

 

本文原文地址:https://blog.csdn.net/carson_ho/article/details/85043628