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ù)的訪(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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市斜友,隨后出現(xiàn)的幾起案子炸裆,更是在濱河造成了極大的恐慌,老刑警劉巖鲜屏,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烹看,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡洛史,警方通過(guò)查閱死者的電腦和手機(jī)惯殊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)也殖,“玉大人土思,你說(shuō)我怎么就攤上這事。” “怎么了浪漠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵陕习,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我址愿,道長(zhǎng)该镣,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任响谓,我火速辦了婚禮损合,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘娘纷。我一直安慰自己嫁审,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布赖晶。 她就那樣靜靜地躺著律适,像睡著了一般。 火紅的嫁衣襯著肌膚如雪遏插。 梳的紋絲不亂的頭發(fā)上捂贿,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音胳嘲,去河邊找鬼厂僧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛了牛,可吹牛的內(nèi)容都是我干的颜屠。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鹰祸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼甫窟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起福荸,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蕴坪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后敬锐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體背传,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年台夺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了径玖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡颤介,死狀恐怖梳星,靈堂內(nèi)的尸體忽然破棺而出赞赖,到底是詐尸還是另有隱情,我是刑警寧澤冤灾,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布前域,位于F島的核電站,受9級(jí)特大地震影響韵吨,放射性物質(zhì)發(fā)生泄漏匿垄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一归粉、第九天 我趴在偏房一處隱蔽的房頂上張望椿疗。 院中可真熱鬧,春花似錦糠悼、人聲如沸届榄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)铝条。三九已至,卻和暖如春滴劲,著一層夾襖步出監(jiān)牢的瞬間攻晒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工班挖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芯砸。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓萧芙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親假丧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子双揪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

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