Collection接口的源碼分析

集合

在分析Java的List集合的時候要先分析一下他們的公共接口Collection摔蓝,這里我通過源碼加上Java1.8 的幫助文檔來分析渣聚。

Collection繼承了Iterable,Iterable在這里做一下簡單的分析:

Iterable是java.lang包里面的一個接口是個頂級接口蔬蕊,不再繼承或?qū)崿F(xiàn)其它的類结澄,在Java1.8的官方文檔里面這樣介紹到這個接口-實現(xiàn)這個接口就允許一個對象實現(xiàn)了“for-each loop”的功能,這個功能從1.5開始岸夯。

里面有三個方法:

返回一個Iterator元素類型是泛型

Iterator<T> iterator();

迭代器對每個元素執(zhí)行規(guī)定的方法直到所有給定的元素已經(jīng)執(zhí)行完畢麻献,或者拋出異常

default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}

這個方法還在研究中,官方文檔給出的介紹是根據(jù)Iterable的描述在元素里面生成一個Spliterator猜扮,目前還不知道這個類是干嘛用的

default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}

Collection僅僅只實現(xiàn)了Iterable這一個接口勉吻,下面就可以看看這個接口里面的方法

這個方法是返回collection集合里面元素的個數(shù),如果元素的個數(shù)大于Integer的最大數(shù)旅赢,則返回Integer的最大數(shù)(看了一下Integer的最大值是2的31次方-1齿桃,最小值是-2的31次方)

int size();

這個方法就是判斷collection集合是不是為空

boolean isEmpty();

如果集合里面包含傳入的Obejct對象,則返回true煮盼,會拋出兩個異常短纵,一種是空指針異常,一種是

boolean contains(Object o);類不相容異常

在集合中返回一個Iterator

Iterator<E> iterator();

返回一個數(shù)組包含集合里面的所有元素僵控。如果集合保證了元素的順序香到,那么這個數(shù)組也要保證元素的順序。這個方法是數(shù)組和集合之間的橋梁

Object[] toArray();

返回一個數(shù)組包含集合里面的所有元素。但是數(shù)組的返回值是特定的养渴,如果元素的類型跟規(guī)定的類型相符,直接返回泛烙,否則一個新的數(shù)組返回里面是規(guī)定的類型

<T> T[] toArray(T[] a);

確保這個集合包含這個特殊的元素理卑,如果此集合因調(diào)用而更改則返回true,如果此集合不允許重復(fù)并且已經(jīng)包含指定元素則返回false

boolean add(E e);

如果存在該Object的話蔽氨,從集合中移除該指定元素的單個實例藐唠。如果這個集合包含指定元素則返回true

boolean remove(Object o);

如果當(dāng)前集合包含所有傳入的集合的元素,則返回true

boolean containsAll(Collection<?> c);

將指定的集合中的所有元素添加到當(dāng)前集合中

boolean addAll(Collection<? extends E> c);

從當(dāng)前集合中移除所有指定的集合中的元素

boolean removeAll(Collection<?> c);

移除滿足給定條件的集合的所有元素

default boolean removeIf(Predicate<? super E> filter)

只保留元素包含在指定集合中的元素

boolean retainAll(Collection<?> c);

移除所有集合中的元素鹉究,這個方法執(zhí)行以后集合就為空了

void clear();

將指定的元素跟跟集合中中元素做對比宇立,返回true表示相等

boolean equals(Object o);

返回一個hash值,這個接口沒有實現(xiàn)這個方法自赔。我們應(yīng)該注意任何重寫Object.equals方法也必須重寫object.hashcode

int hashCode();

創(chuàng)建此集合中的元素的spliterator

@Override
default Spliterator<E> spliterator()

返回一個連續(xù)的的Stream對象

default Stream<E> stream()

返回一個可能的并行流妈嘹,這個集合作為其源。這種方法允許返回一個順序流绍妨。

default Stream<E> parallelStream()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末润脸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子他去,更是在濱河造成了極大的恐慌毙驯,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灾测,死亡現(xiàn)場離奇詭異爆价,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)媳搪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門铭段,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛾号,你說我怎么就攤上這事稠项。” “怎么了鲜结?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵展运,是天一觀的道長。 經(jīng)常有香客問我精刷,道長拗胜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任怒允,我火速辦了婚禮埂软,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己勘畔,他們只是感情好所灸,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炫七,像睡著了一般爬立。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上万哪,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天侠驯,我揣著相機(jī)與錄音,去河邊找鬼奕巍。 笑死吟策,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的的止。 我是一名探鬼主播檩坚,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诅福!你這毒婦竟也來了效床?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤权谁,失蹤者是張志新(化名)和其女友劉穎剩檀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體旺芽,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡沪猴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了采章。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片运嗜。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悯舟,靈堂內(nèi)的尸體忽然破棺而出担租,到底是詐尸還是另有隱情,我是刑警寧澤抵怎,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布奋救,位于F島的核電站,受9級特大地震影響反惕,放射性物質(zhì)發(fā)生泄漏尝艘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一姿染、第九天 我趴在偏房一處隱蔽的房頂上張望背亥。 院中可真熱鬧,春花似錦、人聲如沸狡汉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盾戴。三九已至嵌莉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捻脖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工中鼠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留可婶,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓援雇,卻偏偏與公主長得像矛渴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惫搏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • 一具温、基礎(chǔ)知識:1、JVM筐赔、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,378評論 0 4
  • Java集合框架 Java中封裝了許多常用的數(shù)據(jù)結(jié)構(gòu)铣猩,稱為集合框架,可以有效組織數(shù)據(jù)茴丰,提高程序性能达皿。最初Java只...
    Steven1997閱讀 931評論 0 2
  • 寫在前面自開始在公司實習(xí)以來,經(jīng)常都要用到集合框架贿肩。不僅后臺要用峦椰,在前臺做數(shù)據(jù)交互的時候用得也多。所以我想著是時候...
    EakonZhao閱讀 3,267評論 0 12
  • 簡介 AbstractMutableList 是一個超級好用的抽象類汰规,里面實現(xiàn)了好多對集合操作的直觀方法汤功,新鮮事物...
    坑吭吭閱讀 1,976評論 2 2
  • 前言 本文適合有OC基礎(chǔ)或者對iOS開發(fā)有一點了解的同學(xué),特別是一直在用OC開發(fā)想轉(zhuǎn)Swift的同學(xué)溜哮,因為我本身是...
    cmfish閱讀 295評論 0 3