集合有Collection與Map兩種接口,其中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)