Collection架構(gòu)

Collection概要

Collection接口

Collection是一個(gè)接口,它的主要 分支為ListSet

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ù)的訪問(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ī)訪問(wèn)”數(shù)據(jù)存儲(chǔ)(如數(shù)組)支持的該接口所需的工作。對(duì)于連續(xù)的訪問(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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java集合是java提供的工具包,包含了常用的數(shù)據(jù)結(jié)構(gòu):集合、鏈表、隊(duì)列、棧、數(shù)組、映射等。Java集合工具包位...
    聶叼叼閱讀 546評(píng)論 0 2
  • 1 一些基本問(wèn)題的回答2 集合框架圖(簡(jiǎn)化版)3 集合框架總體分析4 Collection接口5 Iterator...
    艾剪疏閱讀 853評(píng)論 0 1
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 963評(píng)論 0 1
  • 一、基礎(chǔ)知識(shí):1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,569評(píng)論 0 4
  • Java源碼研究之容器(1) 如何看源碼 很多時(shí)候我們看源碼, 看完了以后經(jīng)常也沒(méi)啥收獲, 有些地方看得懂, 有些...
    駱駝騎士閱讀 1,072評(píng)論 0 22

友情鏈接更多精彩內(nèi)容