Collection概要
Collection是一個(gè)接口楔敌,它的主要 分支為
List
和Set
List和Set都是接口啤挎,它們繼承自Collection,List是有序隊(duì)列,List中可以有重復(fù)元素庆聘;而Set是數(shù)學(xué)概念中的集合胜臊,不能有重復(fù)元素。
List實(shí)現(xiàn)類(lèi)繼承了AbstractList伙判,Set實(shí)現(xiàn)類(lèi)繼承了AbstractSet象对,然后它們都繼承了AbstractCollection,AbstractCollection是一個(gè)實(shí)現(xiàn)了Collection的抽象類(lèi)宴抚,實(shí)現(xiàn)了其中的絕大部分函數(shù)勒魔;這樣,在Collection的實(shí)現(xiàn)類(lèi)中菇曲,我們就可以通過(guò)繼承AbstractCollection省去重復(fù)編碼冠绢。
Collection中有一個(gè)iterator()函數(shù),它的作用是返回一個(gè)Iterator接口常潮。通常弟胀,我們可以通過(guò)Iterator迭代器來(lái)遍歷集合。ListIterator是List接口所特有的喊式,在List接口中孵户,通過(guò)ListIterator()返回一個(gè)ListIterator對(duì)象。
下面我們將對(duì)各個(gè)接口和抽象類(lèi)做一下簡(jiǎn)單介紹
1 Collection簡(jiǎn)介
Collection的定義如下:
public interface Collection<E> extends Iterable<E> {}
它是一個(gè)接口岔留,是高度抽象出來(lái)的集合夏哭,它包含了集合的基本操作:添加、刪除贸诚、清空方庭、遍歷(讀取)、是否為空酱固、獲取大小械念、是否保護(hù)某元素等。
Collection接口的所有子類(lèi)(直接子類(lèi)和間接子類(lèi))都必須實(shí)現(xiàn)2種構(gòu)造函數(shù):不帶參數(shù)的構(gòu)造函數(shù) 和 參數(shù)為Collection的構(gòu)造函數(shù)运悲。帶參數(shù)的構(gòu)造函數(shù)龄减,可以用來(lái)轉(zhuǎn)換Collection的類(lèi)型。
//Collection的Api
abstract boolean add(E e)
abstract boolean addAll(Collection<? extends E> c)
abstract void clear()
abstract boolean contains(Object o)
abstract boolean containsAll(Collection<?> c)
abstract boolean equals(Object o)
abstract int hashCode()
abstract boolean isEmpty()
abstract Iterator<E> iterator()
abstract boolean remove(Object o)
abstract boolean removeAll(Collection<?> c)
abstract boolean retainAll(Collection<?> c)
abstract int size()
abstract <T> T[] toArray(T[] a)
abstract Object[] toArray()
2 List簡(jiǎn)介
List的定義如下
public interface List<E> extends Collection<E> {}
List是一個(gè)有序的Collection班眯,每個(gè)元素都有索引希停, 可以對(duì)每個(gè)元素的插入進(jìn)行精準(zhǔn)的控制,用戶(hù)也可以根據(jù)相關(guān)索引進(jìn)行數(shù)據(jù)的訪(fǎng)問(wèn)署隘,并搜索其中的元素宠能。
//List的Api
abstract boolean add(E e)
abstract boolean addAll(Collection<? extends E> c)
abstract void clear()
abstract boolean contains(Object o)
abstract boolean containsAll(Collection<?> c)
abstract boolean equals(Object o)
abstract int hashCode()
abstract boolean isEmpty()
abstract Iterator<E> iterator()
abstract boolean remove(Object o)
abstract boolean removeAll(Collection<?> c)
abstract boolean retainAll(Collection<?> c)
abstract int size()
abstract <T> T[] toArray(T[] a)
abstract Object[] toArray()
// 相比與Collection,List新增的API:
abstract void add(int index, E o)
abstract boolean addAll(int index, Collection<? extends E> c)
abstract E get(int index)
abstract int indexOf(Object o)
abstract int lastIndexOf(Object o)
abstract ListIterator<E> listIterator(int index)
abstract ListIterator<E> listIterator()
abstract E remove(int index)
abstract E set(int index, E element)
abstract List<E> subList(int fromIndex, int toIndex)
3 Set簡(jiǎn)介
Set的定義如下
public interface Set<E> extends Collection<E> {}
Set不能有重復(fù)元素磁餐,就是e1.equals(e2)的元素對(duì) e1 和 e2违崇,并且null只能有一個(gè),正如名稱(chēng)所示,此接口模仿了數(shù)學(xué)中的Set抽象
//Set的Api
abstract boolean add(E e)
abstract boolean addAll(Collection<? extends E> c)
abstract void clear()
abstract boolean contains(Object o)
abstract boolean containsAll(Collection<?> c)
abstract boolean equals(Object o)
abstract int hashCode()
abstract boolean isEmpty()
abstract Iterator<E> iterator()
abstract boolean remove(Object o)
abstract boolean removeAll(Collection<?> c)
abstract boolean retainAll(Collection<?> c)
abstract int size()
abstract <T> T[] toArray(T[] a)
abstract Object[] toArray()
4 AbstractCollection
AbstractCollection的定義如下
public abstract class AbstractCollection<E> implements Collection<E> {}
此類(lèi)提供 Collection 接口的骨干實(shí)現(xiàn)羞延,以最大限度地減少了實(shí)現(xiàn)此接口所需的工作渣淳。
5 AbstractList
AbstractList的定義如下
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {}
此類(lèi)提供 List 接口的骨干實(shí)現(xiàn),以最大限度地減少實(shí)現(xiàn)“隨機(jī)訪(fǎng)問(wèn)”數(shù)據(jù)存儲(chǔ)(如數(shù)組)支持的該接口所需的工作伴箩。對(duì)于連續(xù)的訪(fǎng)問(wèn)數(shù)據(jù)(如鏈表)入愧,應(yīng)優(yōu)先使用 AbstractSequentialList,而不是此類(lèi)嗤谚。
6 AbstractSet
AbstractSet的定義如下
public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}
此類(lèi)提供 Set接口的骨干實(shí)現(xiàn)棺蛛,以最大限度地減少實(shí)實(shí)現(xiàn)此類(lèi)接口所需的工作
7 Iterator
Iterator的定義如下
public interface Iterator<E> {}
Iterator是一個(gè)接口,是Collection進(jìn)行迭代的迭代器,迭代器取代了 Java Collections Framework 中的 Enumeration呵恢。迭代器與枚舉有兩點(diǎn)不同:
1鞠值、迭代器允許調(diào)用者利用定義良好的語(yǔ)義在迭代期間從迭代器所指向的 collection 移除元素媚创。
2渗钉、方法名稱(chēng)得到了改進(jìn)。
//Iterator Api
abstract boolean hasNext()
abstract E next();
abstract void remove()
8 ListIterator
ListIterator的定義如下
public interface ListIterator<E> extends Iterator<E> {}
ListIterator繼承了Iterator钞钙,在Iterator基礎(chǔ)上添加了一系列方法鳄橘,它是隊(duì)列迭代器,專(zhuān)門(mén)用于便利list的迭代芒炼,可以向前和向后對(duì)列表進(jìn)行迭代瘫怜;ListIterator沒(méi)有當(dāng)前元素;它的光標(biāo)位置 始終位于調(diào)用 previous() 所返回的元素和調(diào)用 next() 所返回的元素之間本刽。長(zhǎng)度為 n 的列表的迭代器有 n+1 個(gè)可能的指針位置鲸湃。
注意,remove() 和 set(Object) 方法不是 根據(jù)光標(biāo)位置定義的子寓;它們是根據(jù)對(duì)調(diào)用 next() 或 previous() 所返回的最后一個(gè)元素的操作定義的暗挑。
//Iterator Api
abstract boolean hasNext()
abstract E next()
abstract void remove()
//ListIterator添加的Api
abstract boolean hasPrevious()
abstract E previous()
abstract int nextIndex()
abstract int previousIndex()
abstract void set(E e);
abstract void add(E e)