你應該先閱讀java集合系列一:前傳
Collection的繼承關系如下:

Collection
- 集合層次的根接口,對集合一些常用方法的高度抽象,此接口通常用于需要最大通用性的情況下實作,但是JDK并沒有提供此接口的任何直接實作,它提供了更具體的子接口如Set和List實作!
- Collection接口是list和set的頂級接口,其抽象了一些常用的公共方法,實作了Iterable接口,實作該接口以保證子類可以擷取集合中元素的疊代器已進行周遊,驗證了list和set系列集合是可以使用疊代器周遊的
AbstractCollection
AbstractCollection此抽象類包含一些List和Set的公共實作(實際上還有一些我們不常用的對象也實作它 這裡就不管了),通過實作它可以省去部分重複的編碼,此外它将iterator和size聲明為Abstract讓子類來實作
Set
- Set是不包含重複元素的集合(如何做到的?後續寫到具體的集合再詳細說),Set實作了Collection,它也是一個接口,沒有添加任何新的方法,和Collection是一緻的
- 為什麼一緻還要建立Set呢?Collection是Set和List的頂層抽象,而Set接口和List接口分别是set集合和list集合的頂層,通過在Set接口和List接口中添加一些特有的方法可以更好的友善調用者使用集合,比如下面看下List集合它就添加了list的特有方法,而這些List特有方法很明顯不适合放在Collection中,因為這違背了迪米特原則
List
- List是有序集合,實作List接口的集合可以精确控制清單中的每一個元素的插入位置,可以通過索引通路元素
- 允許重複元素
- List接口提供了一個特殊的疊代器ListIterator,這個不詳細說了不知道的百度并發修改異常!通過ListIterator在周遊中允許元素插入和替換
-
List提供了精準的add和remove方法,如下:
void add(int index, E element);
E remove(int index);
通過add方法可以将元素添加到指定位置,通過remove方法可以删除指令位置的元素,從性能的角度來說我們在使用中要謹慎對待這兩個方法,原因是不管是添加還是删除,原位置所有的元素都需要前移或後移,舉個例子?現在A集合中有1,2,3,4,5個元素,現在add(0,6),往0的位置添加一個資料6那麼後續的1,2,3,4,5都需要後移,同樣如果remove(0),2,3,4,5都需要前移,資料量大的時候注意
AbstractSet
此抽象類繼承了AbstractCollection,實作了Set接口,最大程度減少了直接實作Set接口的工作量,AbstractSet中并沒有覆寫AbstractCollection的任何實作,它隻是添加了equals和hashCode和removeAll的實作
AbstractList
此抽象類繼承了AbstractCollection,實作了List接口,它實作了List中絕大部分函數,底層集合實作該類可以簡化更多工作量
ListIterator
List集合特有的疊代器,允許在任意方向上周遊清單,在疊代期間修改元素不會觸發fail-fast機制