轉載自:http://www.cnblogs.com/skywang12345/p/3308513.html
概要
首先,我們對Collection進行說明。下面先看看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對象。
1 Collection簡介
Collection的定義如下:
public interface Collection<E> extends Iterable<E> {}
它是一個接口,是高度抽象出來的集合,它包含了集合的基本操作:添加、刪除、清空、遍歷(讀取)、是否爲空、獲取大小、是否保護某元素等等。
Collection接口的所有子類(直接子類和間接子類)都必須實現2種構造函數:不帶參數的構造函數 和 參數爲Collection的構造函數。帶參數的構造函數,可以用來轉換Collection的類型。
// Collection的API
abstract boolean add(E object)
abstract boolean addAll(Collection<? extends E> collection)
abstract void clear()
abstract boolean contains(Object object)
abstract boolean containsAll(Collection<?> collection)
abstract boolean equals(Object object)
abstract int hashCode()
abstract boolean isEmpty()
abstract Iterator<E> iterator()
abstract boolean remove(Object object)
abstract boolean removeAll(Collection<?> collection)
abstract boolean retainAll(Collection<?> collection)
abstract int size()
abstract <T> T[] toArray(T[] array)
abstract Object[] toArray()
2 List簡介
List的定義如下:
public interface List<E> extends Collection<E> {}
關於API方面。既然List是繼承於Collection接口,它自然就包含了Collection中的全部函數接口;由於List是有序隊列,它也額外的有自己的API接口。主要有“添加、刪除、獲取、修改指定位置的元素”、“獲取List中的子隊列”等。
// Collection的API
abstract boolean add(E object)
abstract boolean addAll(Collection<? extends E> collection)
abstract void clear()
abstract boolean contains(Object object)
abstract boolean containsAll(Collection<?> collection)
abstract boolean equals(Object object)
abstract int hashCode()
abstract boolean isEmpty()
abstract Iterator<E> iterator()
abstract boolean remove(Object object)
abstract boolean removeAll(Collection<?> collection)
abstract boolean retainAll(Collection<?> collection)
abstract int size()
abstract <T> T[] toArray(T[] array)
abstract Object[] toArray()
// 相比與Collection,List新增的API:
abstract void add(int location, E object)
abstract boolean addAll(int location, Collection<? extends E> collection)
abstract E get(int location)
abstract int indexOf(Object object)
abstract int lastIndexOf(Object object)
abstract ListIterator<E> listIterator(int location)
abstract ListIterator<E> listIterator()
abstract E remove(int location)
abstract E set(int location, E object)
abstract List<E> subList(int start, int end)
3 Set簡介
Set的定義如下:
public interface Set<E> extends Collection<E> {}
Set是一個繼承於Collection的接口,即Set也是集合中的一種。Set是沒有重複元素的集合。關於API方面。Set的API和Collection完全一樣。
// Set的API
abstract boolean add(E object)
abstract boolean addAll(Collection<? extends E> collection)
abstract void clear()
abstract boolean contains(Object object)
abstract boolean containsAll(Collection<?> collection)
abstract boolean equals(Object object)
abstract int hashCode()
abstract boolean isEmpty()
abstract Iterator<E> iterator()
abstract boolean remove(Object object)
abstract boolean removeAll(Collection<?> collection)
abstract boolean retainAll(Collection<?> collection)
abstract int size()
abstract <T> T[] toArray(T[] array)
abstract Object[] toArray()
4 AbstractCollection
AbstractCollection的定義如下:
public abstract class AbstractCollection<E> implements Collection<E> {}
AbstractCollection是一個抽象類,它實現了Collection中除iterator()和size()之外的函數。
AbstractCollection的主要作用:它實現了Collection接口中的大部分函數。從而方便其它類實現Collection,比如ArrayList、LinkedList等,它們這些類想要實現Collection接口,通過繼承AbstractCollection就已經實現了大部分的接口了。
5 AbstractList
AbstractList的定義如下:
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {}
AbstractList是一個繼承於AbstractCollection,並且實現List接口的抽象類。它實現了List中除size()、get(int location)之外的函數。AbstractList的主要作用:它實現了List接口中的大部分函數。從而方便其它類繼承List。
另外,和AbstractCollection相比,AbstractList抽象類中,實現了iterator()接口。
6 AbstractSet
AbstractSet的定義如下:
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}
AbstractSet是一個繼承於AbstractCollection,並且實現Set接口的抽象類。由於Set接口和Collection接口中的API完全一樣,Set也就沒有自己單獨的API。和AbstractCollection一樣,它實現了List中除iterator()和size()之外的函數。AbstractSet的主要作用:它實現了Set接口中的大部分函數。從而方便其它類實現Set接口。
7 Iterator
Iterator的定義如下:
public interface Iterator<E> {}
Iterator是一個接口,它是集合的迭代器。集合可以通過Iterator去遍歷集合中的元素。Iterator提供的API接口,包括:是否存在下一個元素、獲取下一個元素、刪除當前元素。注意:Iterator遍歷Collection時,是fail-fast機制的。即,當某一個線程A通過iterator去遍歷某集合的過程中,若該集合的內容被其他線程所改變了;那麼線程A訪問集合時,就會拋出ConcurrentModificationException異常,產生fail-fast事件。關於fail-fast的詳細內容,我們會在後面專門進行說明。TODO
// Iterator的API
abstract boolean hasNext()
abstract E next()
abstract void remove()
8 ListIterator
ListIterator的定義如下:
public interface ListIterator<E> extends Iterator<E> {}
ListIterator是一個繼承於Iterator的接口,它是隊列迭代器。專門用於便利List,能提供向前/向後遍歷。相比於Iterator,它新增了添加、是否存在上一個元素、獲取上一個元素等等API接口。// ListIterator的API
// 繼承於Iterator的接口
abstract boolean hasNext()
abstract E next()
abstract void remove()
// 新增API接口
abstract void add(E object)
abstract boolean hasPrevious()
abstract int nextIndex()
abstract E previous()
abstract int previousIndex()
abstract void set(E object)