Carson帶你學(xué)Java:那些關(guān)于集合的內(nèi)容都匯總在這里了!


前言

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

目錄

示意圖

1. 簡介

示意圖

2. 與數(shù)組的區(qū)別

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

示意圖

3. 集合類型

  • Java集合的類型可分為SetListMapQueue 4種

  • 具體介紹如下

示意圖

下面會更加詳細地說明


4. 集合繼承關(guān)系

  • Java集合的根接口 = Collection接口 + Map接口

Java的集合類都實現(xiàn)上述2個接口

其中:

  • ListSetQueue實現(xiàn)了 Collection接口。繼承關(guān)系如下:
示意圖
  • Map 實現(xiàn)了 Map接口 。繼承關(guān)系如下:
示意圖

下面,我將主要介紹 Collection接口 、Map接口 & 其具體集合實現(xiàn)類


5. Collection相關(guān)

在本節(jié)中,會先介紹Collection接口,再介紹其具體集合實現(xiàn)類(ListSetQueue類)

5.1 Collection 接口

  • 定義
    一個接口,是集合ListSetQueue容器的頂層父接口

  • 包結(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);
  • CollectionsArrays 的區(qū)別
示意圖

下面,我將介紹其具體集合實現(xiàn)類: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(); // 判斷集合是否為空
  • 集合實現(xiàn)類
    List的集合實現(xiàn)類主要包括:VectorArrayListLinkedListStack。具體介紹如下
示意圖
  • VectorArrayListLinkedList之間的區(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)類主要包括: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

// 時間復(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)類主要包括:PriorityQueueDueueArrayDequeLinkedList)、PriorityQueueArrayBlockingQueueLinkedBlockingQueue)。具體介紹如下
示意圖

至此,關(guān)于Collection接口、其具體集合實現(xiàn)類(ListSetQueue類)講解完畢。總結(jié)如下

示意圖

6. Map 相關(guān)

在本節(jié)中,會先介紹Map接口,再介紹其具體集合實現(xiàn)類中最常見的HashMapLinkedHashMapTreeMap

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)類中最常見的HashMapLinkedHashMapTreeMap

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.7JDK 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)子類比較

  • HashMapLinkedHashMapTreeMap的區(qū)別

    示意圖

  • HashMapHashtable 的區(qū)別

示意圖
  • HashMapConcurrentHashMap 的區(qū)別
示意圖

至此,關(guān)于Java集合的相關(guān)內(nèi)容(ColletcionMap接口 & 其相關(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ù)干貨,追求短、平、快,但卻不缺深度


請點贊!因為你的鼓勵是我寫作的最大動力!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內(nèi)容