Java集合詳解(一):全面理解Java集合

Yanci丶發表於2021-05-24

概述

Java所有集合類都在java.util包下,支援併發的集合在java.util.concurrent(juc)包下。

集合與陣列區別:

  1. 陣列大小是固定的,集合大小可以根據使用情況進行動態擴容。
  2. 陣列可以存放基本資料型別,集合只能存放引用資料型別。

Java中集合分為單列集合(實現Collection介面)和雙列集合(實現Map介面)兩種形式,常用集合框架圖如下圖所示:

Map集合

  常用實現類有HashMap,HashTable,LinkedHashMap。

  • HashMap

  HashMap底層原理實現請參考:。

  1. 底層是基於陣列和連結串列/紅黑樹實現的(jdk8採用的紅黑樹結構)。
  2. HashMap的key可以為null(因為key是不重複的所以只會僅存在一個),value可以存在多個null值。
  3. HashMap是執行緒不安全的。
  • HashTable

  1. 底層資料和HashMap是一樣的。
  2. HashTable的key和value都不允許為null。
  3. HashTable是執行緒安全的。
  • LinkedHashMap

  1. LinkedHashMap 繼承 HashMap,底層資料結構較HashMap多了一個雙迴圈連結串列。
  2. LinkedHashMap 是有序。
  3. LinkedHashMap 的key可以為null(因為key是不重複的所以只會僅存在一個),value可以存在多個null值。
  4. LinkedHashMap 是執行緒不安全的。
  • ConcurrentHashMap

  1. ConcurrentHashMap是執行緒安全的,效能比HashTable好。

List集合

  常用實現類有ArrayList,LinkedList。

  • ArrayList

  1. ArrayList底層是基於陣列實現的,查詢快,增刪慢。
  2. ArrayList是執行緒不安全的,效率高。
  • LinkedList

  1. LinkedList是基於連結串列實現的,查詢慢,增刪快。
  2. LinkedList是執行緒不安全的,效率高。
  • Vector

  1. Vector底層是基於陣列實現的,查詢快,增刪慢。
  2. Vector是執行緒安全的,效率低(很少使用,面試有時候會問到)。

Set集合

  常用實現類有HashSet,TreeSet,LinkedHashSet。

  • HashSet

  1. HashSet是無序的(底層是根據hash演算法進行排序的,對於我們來說它不能按照插入順序或者資料大小進行排序,所以我們稱為無序)。
  2. HashSet元素可以為null。
  3. HashSet是執行緒不安全的。
  • LinkedHashSet

  1. LinkedHashSet底層是基於連結串列和hash表實現的。
  2. LinkedHashSet是有序的。
  3. LinkedHashSet元素可以為null。
  4. LinkedHashSet是執行緒不安全的。
  • TreeSet

  1. TreeSet實現了SortedSet介面,採用的是紅黑樹演算法進行排序的。
  2. TreeSet是有序的。
  3. TreeSet元素不能為null。
  4. TreeSet是執行緒不安全的,

Queue佇列

  Queue是Java1.5開始引入的。常用實現類有ArrayQueue。

相關文章