針對收集物件的需求,Java SE提供了Collection
API,而Lambda新特性的加入,對Collection API在運用時增添不少幫助,JDK8也對Collection
API作了不少增強,瞭解Collection
API,是瞭解Lambda應用時不錯的起點。
Collection
API介面繼承架構設計如下:
收集物件的行為,像是新增物件的
add()
方法,移除物件的remove()
方法等,都是定義在java.util.Collection
中。既然可以收集物件,也要能逐一取得物件,這就是java.lang.Iterable
定義的行為,它定義了iterator()
方法傳回java.util.Iterator
實作物件,可以讓你逐一取得收集之物件,Iterable
也是JDK8對Collection API進行增強的對象之一,詳細操作方式,稍後再作說明。收集物件的共同行為定義在
Collection
中,然而收集物件會有不同的需求。如果希望收集時記錄每個物件的索引順序,並可依索引取回物件,這樣的行為定義在java.util.List
介面中。如果希望收集的物件不重複,具有集合的行為,則由java.util.Set
定義。如果希望收集物件時可以佇列方式,收集的物件加入至尾端,取得物件時可以從前端,則可以使用java.util.Queue
。如果希望可以對Queue
的兩端進行加入、移除等操作,則可以使用java.util.Deque
。收集物件時,會依需求使用不同的介面實作物件,舉例來說,如果想要收集時具有索引順序,實作方式之一就是使用陣列,而以陣列實作
List
的就是java.util.ArrayList
,如果你查看API文件,會發現有以下繼承與實作架構:Java SE API不僅提供許多已實作類別,也考慮到你自行擴充API的需求,以收集物件的基本行為來說,其提供
java.util.AbstractCollection
實作了Collection
基本行為,java.util.AbstractList
實作了List
基本行為,必要時,你可以繼承AbstractCollection
實作自己的Collection
,繼承AbstractList
實作自己的List
,這會比直接實作Collection
或List
介面方便許多。有時為了只表示我們感興趣的介面或類別,會簡化繼承與實作架構圖。例如:
這樣的表示方式,可以更清楚地明瞭哪些類別實作了哪個介面、繼承了哪個類別,或哪些介面又繼承自哪個介面,至於詳細的繼承與實作架構,可在API文件上查詢。