集合框架

Collection接口:
在這裏插入圖片描述
Collection接口中有兩個方法是List接口和Set接口共有的:add()和iterator()方法;
但是List接口又自己添加了新方法:get()、set()方法,這兩個方法是List獨有的;
List接口允許存放重複的數據,但Set接口不允許存放重複數據;
(1)List:
ArrayList:是基於數組實現的,其修改數據和查找數據效率更高;
LinkedList:是基於雙向鏈表實現的,其增加數據和刪除數據效率更高;
Vector:也是基於數組實現的,但是他是線程安全的,效率很低,一般不使用;
ArrayList和LinkedList都是異步實現的,不安全,但是效率相比於Vector都要高;
List接口要想保存自定義類的對象,該類必須覆寫equals()方法來使用contains()、remove()方法
(2)Set:
Set接口就是value值相同的Map集合,從源代碼中可以看出:
TreeSet中:
在這裏插入圖片描述
在這裏插入圖片描述
因爲把Set的值放在了Map的key值上了,所以Set不允許數據重複。
還有HashSet中:
在這裏插入圖片描述
在這裏插入圖片描述
HashSet:底層是由哈希表和紅黑樹實現的,他是無序存儲;可以保存自定義類;
TreeSet:底層是由紅黑樹實現的;它是有序存儲;
在這裏插入圖片描述
TreeSet的有序存儲是指傳入一個比較器;
但是TreeSet如果要保存自定義類,.自定義類必須要麼實現Comparable接口,要麼向Treeset傳入比較器(Comparator接口);
Comparable和Comparator接口的用法

Map接口:
在這裏插入圖片描述
(3)HashMap:
1.HashMap允許key和value爲null,且key值有且只有一個爲null,value可以有多個爲null;
2.異步處理,效率高,線程不安全;
3.底層是哈希表+紅黑樹;

(4)Hashtable:
1.Hashtable 中key和value均不允許爲null;
2.使用方法上加鎖,效率低,線程安全;
3.底層是哈希表;

(5)TreeMap:
1.TreeMap是有序的,key不能爲null;
2.TreeMap採用異步處理,線程不安全,性能較高;
3.底層是紅黑樹;

(6)ConcurrentHashMap:
1.ConcurrentMap是線程安全的,
2.JDK1.7之前,其底層是Segement+哈希表,JDK1.8改爲了哈希表+紅黑樹

需要注意的是:List和Set接口都可以使用Iterator接口,進行循環輸出;
如:

List<String> list = new ArrayList<>() ;
Iterator<String> iterator = list.iterator() ; 

但Map接口不可以,如果要進行循環輸出,需要使用entrySet()方法將其轉化爲Set對象,才能使用Iterator方法:public Set<Map.Entry<K, V>> entrySet();
如:

Map<Integer,String> map = new HashMap<>() ;
Set<Map.Entry<Integer,String>> set = map.entrySet() ;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章