本系列文章將主要從源碼角度分析和講解Java集合框架的主要架構,各個類的實現和用法。一來可以幫助Java初學者更新的掌握Java集合類,二來可以讓自己重新審視這些類的實現細節有助於提高自己的編程能力。
什麼是集合框架?
集合框架是一個操作集合元素的一個統一的架構。主要包括一些內容:
接口 表示一個數據結構的抽象,統一定義相關操作方法
實現 具體數據結構的實現類
算法 實現數據結構用到的相關算法
首先要明確,集合代表了一組對象(和數組一樣,但數組長度不能變,而集合能)。Java中的集合框架定義了一套規範,用來表示、操作集合,使具體操作與實現細節解耦。
其實說白了,可以把一個集合看成一個微型數據庫,操作不外乎“增刪改查”四種操作,我們在學習使用一個具體的集合類時,需要把這四個操作的<code>時空複雜度/<code>弄清楚了,基本上就可以說掌握這個類了。
繼承關係
如下圖所示,實線邊框的是實現類,折線邊框的是抽象類,而點線邊框的是接口
頂層接口
Iterator 一個迭代器,所有集合類提供 iterator 的實現 ,Iterator接口如下:
public interface Iterator { boolean hasNext(); E next(); void remove(); //optional }
Collection 所有接口的根接口,代表一組元素的集合。Java並沒有提供這個接口直接的實現,而是提供了三個子接口
List 表示一個有序的集合(an ordered collection),允許有重複元素
Set 不允許有重複元素的集合
Queue 用於在處理之前保存多個元素的集合。提供了一些額外的insertion, extraction, and inspection 操作
Map 包含了key-value對。Map不能包含重複的key,但是可以包含相同的value 每個key包含最多一個Value值。
List接口
List裡存放的對象是有序的,同時也是可以重複的,List關注的是索引,擁有一系列和索引相關的方法,查詢速度快。因為往list集合裡插入或刪除數據時,會伴隨著後面數據的移動,所有插入刪除數據速度慢
實現類
ArrayList
LinedList
Set接口
實現類
HashSet
TreeSet
Map接口
實現類
HashMap
TreeMap
LinkedHashMap
實現集合接口的類一般遵循<code>+/<code>的命名方式,通用的集合實現類如下表:
InterfaceHash TableResizable ArrayBalanced TreeLinked ListHash Table + Linked ListSetHashSetTreeSetLinkedHashSetListArrayListLinkedListDequeArrayDequeLinkedListMapHashMapTreeMapLinkedHashMap總結
有點倉促,後續會陸續分析具體類的源碼實現。歡迎大家關注留言,如有錯誤之處請指正。
參考
https://docs.oracle.com/javase/tutorial/collections/interfaces/index.html