java深化——集合的接口與各種實現類的解析與對比總結

集合有CollectionMap兩種接口,其中Collection有兩種子接口(list、set)

一、Collection接口的兩個子接口(list、set)

  1) List中的元素有序,不唯一。常用的實現類有ArrayList、LinkedList和 vector。

   ·ArrayList 

底層數據結構是(Object)數組;

ArrayList的Object數組初始化長度爲10,擴容每次擴容0.5倍。(15,20...);

查詢效率高,增刪效率低,線程不安全。

   ·LinkedList :

底層數據結構是雙向鏈表;

查詢效率低,增刪效率高,線程不安全。

    ·vector :

Vector 與 ArrayList的類似

相同點:底層數據結構相同,都是Object類型的數組

不同點:

1、Vector的add()方法是同步(synchroniszed)方法,ArrayList的add()方法是    非同步方法;

2、Vector是在調用構造方法(創建對象)時,直接初始化容量爲10,ArrayList是在第     一次調用添加(add)方法時,初始化容量爲10;

3、Vector擴容每次擴容1倍,ArrayList每次擴充0.5倍;

4、Vector的版本是JDK1.0 ArrayList是JDK1.2版;

5、Vector是線程同步的,安全性高 ,效率低;

ArrayList是線程非同步的,安全性低,效率高。

 

  2) Set中的元素無序,唯一。常用的實現類有HashSet和TreeSet。

     ·HashSet(無序、唯一):

底層數據結構是哈希碼;

採用哈希算法實現,查詢效率和增刪效率都比較高;

存儲自定義對象時,必須重寫hashCode()方法與equal()方法。

     ·TreeSet(有序(升序)、唯一):

底層是二叉樹,使用TreeMap實現的;

存儲自定義對象時,要求必須具備比較規則,可以實現內部比較器Comparable接口, 也可以是外部比較器Comparator接口

TreeSet中不能放入null元素

 

 

二、Map接口(存儲方式爲 “鍵(key)-值(value) 對”)

Map 接口的實現類有HashMap、HashTable和TreeMap等。

·HashMap(無序,唯一):

底層數據結構是哈希,採用哈希算法實現;(數組+鏈表)

線程不安全,效率高;

允許key或value爲null。

·HashTable(key:無序,唯一):

HashMap類似Hashtable,有以下幾點區別:

1、版本不同:HashMap JDK1.2

Hashtable JDK1.0 ;

2、HashMap繼承了AbstractMap,實現了Map接口,

Hashtable繼承了Dictionary,實現Map接口 ;

3、HashMap允許null鍵和null值,但null作爲key只允許一個,

Hashtable爲非null的鍵和值 ;

4、HashMap是線程不同步的(效率高,安全性低),

Hashtable是線程同步的(效率低,安全性高)。

·TreeMap

底層是紅黑樹;

TreeMap和HashMap實現了同樣的接口Map,因此,用法對於調用者來說沒有區別。 HashMap效率高於TreeMap,在需要排序的Map時才選用TreeMap。

如果TreeMap存儲自定義對象作爲key時,要求必須具備比較規則,否則運行報錯。

(實現Comparable接口,調用compareTo()方法,類似TreeSet)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章