Collection架構介紹

轉自:http://www.fengfly.com/plus/view-213740-1.html

Collection的架構


Collection是一個接口,它主要的兩個分支是:List 和 Set

List和Set都是接口,它們繼承於Collection。List是有序的隊列,List中可以有重複的元素;而Set是數學概念中的集合,Set中沒有重複元素
List和Set都有它們各自的實現類。

  爲了方便,我們抽象出了AbstractCollection抽象類,它實現了Collection中的絕大部分函數;這樣,在Collection的實現類中,我們就可以通過繼承AbstractCollection省去重複編碼。AbstractList和AbstractSet都繼承於AbstractCollection,具體的List實現類繼承於AbstractList,而Set的實現類則繼承於AbstractSet。

  另外,Collection中有一個iterator()函數,它的作用是返回一個Iterator接口。通常,我們通過Iterator迭代器來遍歷集合。ListIterator是List接口所特有的,在List接口中,通過ListIterator()返回一個ListIterator對象。

  接下來,我們看看各個接口和抽象類的介紹;然後,再對實現類進行詳細的瞭解。


Collection 是高度抽象出來的集合,它包含了集合的基本操作:添加、刪除、清空、遍歷(讀取)、是否爲空、獲取大小、是否保護某元素等等。

Collection接口的所有子類(直接子類和間接子類)都必須實現2種構造函數:不帶參數的構造函數 和 參數爲Collection的構造函數。帶參數的構造函數,可以用來轉換Collection的類型。


List是一個繼承於Collection的接口,即List是集合中的一種。List是有序的隊列,List中的每一個元素都有一個索引;第一個元素的索引值是0,往後的元素的索引值依次+1。和Set不同,List中允許有重複的元素。
List的官方介紹如下

A List is a collection which maintains an ordering for its elements. Every element in the List has an index. Each element can thus be accessed by its index, with the first index being zero. Normally, Lists allow duplicate elements, as compared to Sets, where elements have to be unique.

關於API方面。既然List是繼承於Collection接口,它自然就包含了Collection中的全部函數接口;由於List是有序隊列,它也額外的有自己的API接口。主要有“添加、刪除、獲取、修改指定位置的元素”、“獲取List中的子隊列”等。


AbstractCollection是一個抽象類,它實現了Collection中除iterator()和size()之外的函數。
AbstractCollection的主要作用:它實現了Collection接口中的大部分函數。從而方便其它類實現Collection,比如ArrayList、LinkedList等,它們這些類想要實現Collection接口,通過繼承AbstractCollection就已經實現了大部分的接口了。


AbstractList是一個繼承於AbstractCollection,並且實現List接口的抽象類。它實現了List中除size()、get(int location)之外的函數。
AbstractList的主要作用:它實現了List接口中的大部分函數。從而方便其它類繼承List。
另外,和AbstractCollection相比,AbstractList抽象類中,實現了iterator()接口。


AbstractSet是一個繼承於AbstractCollection,並且實現Set接口的抽象類。由於Set接口和Collection接口中的API完全一樣,Set也就沒有自己單獨的API。和AbstractCollection一樣,它實現了List中除iterator()和size()之外的函數。
AbstractSet的主要作用:它實現了Set接口中的大部分函數。從而方便其它類實現Set接口。


Iterator是一個接口,它是集合的迭代器。集合可以通過Iterator去遍歷集合中的元素。Iterator提供的API接口,包括:是否存在下一個元素、獲取下一個元素、刪除當前元素。
注意:Iterator遍歷Collection時,是fail-fast機制的。即,當某一個線程A通過iterator去遍歷某集合的過程中,若該集合的內容被其他線程所改變了;那麼線程A訪問集合時,就會拋出ConcurrentModificationException異常,產生fail-fast事件。關於fail-fast的詳細內容,我們會在後面專門進行說明。


ListIterator是一個繼承於Iterator的接口,它是隊列迭代器。專門用於便利List,能提供向前/向後遍歷。相比於Iterator,它新增了添加、是否存在上一個元素、獲取上一個元素等等API接口




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章