1. 程式人生 > >Java集合Collection、Map(JDK1.8的HashMap)的各個功能特點及總結

Java集合Collection、Map(JDK1.8的HashMap)的各個功能特點及總結

Java中集合總結

這裡寫圖片描述

可以 點選看大圖

結構分析

  • 陣列 : 查詢快,增刪慢
  • 連結串列 : 查詢慢,增刪快
  • 雜湊表 : 保證元素的唯一

引用塊內容

Collection

List

特點: 有序且可重複的

ArrayList
  • 底層資料結構是陣列,查詢快,增刪慢
  • 執行緒不安全,效率高
Vector
  • 底層資料結構是陣列,查詢快,增刪慢
  • 執行緒安全,效率低
LinkedList
  • 底層資料結構是連結串列,查詢慢,增刪快
  • 執行緒不安全,效率高

Set

特點: 無序且不可重複的

HashSet

  • 底層資料結構是雜湊表。
    • 雜湊表依賴兩個方法:hashCode()和equals()
    • 執行順序 :
      1. 先判斷hashCode()值是否相同
      2. 如果是,繼續執行equal(),看其返回值
        • true : 說明元素重複,不新增
        • fasle : 直接新增到集合中
      3. 如果否,直接新增到集合中
    • 最終 :
      • 自動生成hashCode()和equals()方法即可

LinkedHashSet

  • 底層資料結構由連結串列和雜湊表組成。
  • 由連結串列保證元素有序。
  • 由雜湊表保證元素唯一。

TreeSet

  • 底層資料結構是紅黑樹。(是一種自平衡的二叉樹)
  • 如何保證元素唯一性呢?
    • 根據比較的返回值是否是0來決定
  • 如何保證元素的排序呢?
    • 兩種方式
      1. 自然排序(元素具備比較性)
        • 讓元素所屬的類實現Comparable介面
      2. 比較器排序(集合具備比較性)
        • 讓集合接收一個Comparator的實現類物件

Map

HashMap

在JDK1.8之前,HashMap底層是基於雜湊表的,資料結構是陣列+連結串列
在JDK1.8,引入了紅黑樹,資料結構是陣列+連結串列+紅黑樹

JDK1.8的HashMap

這裡寫圖片描述

引入原因 : 提高HashMap的效能

  • 解決發生雜湊碰撞後,連結串列過長從而導致索引效率慢的問題
  • 具體:
    • 利用紅黑樹快速增刪改查的特點
    • 時間複雜度從O(n) 降為 O(logn)
應用場景
  • 當連結串列長度>8時,將該連結串列轉換成紅黑樹
  • 即紅黑樹作為儲存資料&解決Hash衝突的第3方案
    1. 無衝突時:存放陣列
    2. 衝突&連結串列長度<8時:存放在單鏈表
    3. 衝突&連結串列長度>8時:存放在紅黑樹

Hashtable

  • 底層資料結構是雜湊表。
    • 雜湊表依賴兩個方法:hashCode()和equals()
    • 執行順序 :
      1. 先判斷hashCode()值是否相同
      2. 如果是,繼續執行equal(),看其返回值
        • true : 說明元素重複,不新增
        • fasle : 直接新增到集合中
      3. 如果否,直接新增到集合中
    • 最終 :
      • 自動生成hashCode()和equals()方法即可

LinkedHashMap

  • 底層資料結構由連結串列和雜湊表組成。
  • 由連結串列保證元素有序。
  • 由雜湊表保證元素唯一。

TreeMap

  • 底層資料結構是紅黑樹。(是一種自平衡的二叉樹)
  • 如何保證元素唯一性呢?
    • 根據比較的返回值是否是0來決定
  • 如何保證元素的排序呢?
    • 兩種方式
      1. 自然排序(元素具備比較性)
        • 讓元素所屬的類實現Comparable介面
      2. 比較器排序(集合具備比較性)
        • 讓集合接收一個Comparator的實現類物件

按照實現介面分類:

  • 實現Map介面的有:EnumMap、IdentityHashMap、HashMap、LinkedHashMap、WeakHashMap、TreeMap

  • 實現List介面的有:ArrayList、LinkedList

  • 實現Set介面的有:HashSet、LinkedHashSet、TreeSet

  • 實現Queue介面的有:PriorityQueue、LinkedList、ArrayQueue

根據底層實現的資料結構分類:

  • 底層以陣列的形式實現:EnumMap、ArrayList、ArrayQueue
  • 底層以連結串列的形式實現:LinkedHashSet、LinkedList、LinkedHashMap
  • 底層以hash table的形式實現:HashMap、HashSet、LinkedHashMap、LinkedHashSet、WeakHashMap、IdentityHashMap
  • 底層以紅黑樹的形式實現:TreeMap、TreeSet
  • 底層以二叉堆的形式實現:PriorityQueue
參考

參考文章

參考文章