集合類之Collection接口和Map接口


先上圖:

  

一、自己了解

  Java的集合類主要有List、Set和Map三大類,其中,List和Set是Collection接口一脈,Map接口自成一脈。

  其中,還有兩個工具類Arrays和Collections

二、學習了解

  1.List

    List的特性是按順序插入,可重復,允許null值。實現List接口的集合主要有:ArrayList,LinkedList,Vector和Stack。

    簡單地講一下:

    ArrayList是動態數組,底層是數組,默認初始化大小是10,可以動態擴容1.5倍,線程不安全。適用於隨機訪問。

    LinkedList底層是雙向鏈表,線程不安全。由於是雙向鏈表,訪問時需要從頭部或者尾部進行遍歷,適用於插入刪除比較多的操作

    Vector底層也是數組,類似於ArrayList,但是它是線程安全的。

    Stack是繼承Vector類的,實現了一個先進后出的棧結構,其中Stack提供了額外的5個方法。基本的push和pop操作,以及peek操作,empty方法判斷棧空,search方法檢測一個元素在棧中的位置。Stack剛創建后是一個空棧。

  2.Set

    Set的特性是無序,不可重復,允許null值但只允許一個。實現Set接口的集合主要有HashSet、TreeSet、EnumSet

    HashSet底層是用HashMap實現的,用哈希表實現的(數組+鏈表)

    TreeSet底層是用TreeMap實現的,用的是紅黑樹實現的。

  3.Map

    上面講的Collection叫做集合,Map叫做映射。如下圖:

    圖來源Java3y

    Map集合的特點:將鍵映射到值得對象,一個映射不能包含重復的鍵,每個鍵最多只能映射一個值。

    Map與Collection的區別在於Map是以鍵值成對存儲的,鍵是唯一的,值是可以重復的;Collection集合存在元素是單獨的,其中Set是唯一的,List是可重復的。

    要點在於Map針對鍵,Collection針對值。

三、 深入了解(基於JDK1.8)

1.LinkedList ArrayList Vector的區別

  

區別之處

ArrayList

LinkedList

Vector

底層實現

基於動態數組

基於雙向鏈表

基於動態數組

初始容量

10

 

10

擴容大小

增長原數組大小的50%

 

增長原數組大小的100%

是否線程安全

不安全

不安全

安全

各自優點

適用隨機訪問,查詢效率比LinkedList和Vector高

插入速度快,適用於插入和刪除較多的操作。

查詢效率比ArrayList低,適用於數據量較大的數據

2.HashMap HashTable ConcurrentHashMap的區別

  

區別

HashMap

HashTable

ConcurrentHashMap

TreeMap

底層實現

數組+鏈表+紅黑樹

數組+鏈表

JDK1.7 ReentrantLock+Segment+HashEntry

JDK1.8

Synchronized+CAS+Node+紅黑樹

 

紅黑樹

初始容量

16(2的n次冪)

11

16

 

負載因子

0.75

0.75

0.75

 

擴容大小

原大小的2倍

原大小的2倍+1

原來的2倍

 

是否線程安全

不安全

安全

安全

不安全

各自特點

HashMap可以將空值作為一個表的條目的key或value

 已經過時

ConcurrentHashMap的key和Value都不能為null

 TreeMap中所有的元素都保持着某種固定的順序,如果你需要得到一個有序的結果你就應該使用TreeMap

3.HashSet與HashMap   TreeSet與TreeMap的關系

   HashSet依賴HashMap

  

   TreeSet依賴TreeMap

  

 

 

  


免責聲明!

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



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