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


概述

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM