集合類的相關(guān)總結(jié)(一)

Iterator類

對(duì) collection 進(jìn)行迭代的迭代器

  • 提供的方法:

  • hasNext() 如果仍有元素可以迭代,則返回 true。

  • next() 返回迭代的下一個(gè)元素溢吻。

  • remove() 從迭代器指向的 collection 中移除迭代器返回的最后一個(gè)元素(可選操作)。

  • 代碼示例:


    圖片.png

特別注意:

  • next()方法和remove()方法不能出現(xiàn)在同一個(gè)代碼塊里,不然會(huì)使集合變得不確定俺夕。
  • remove()方法雖然可以直接移除點(diǎn)集合中的元素裳凸,但是如果如要用迭代器遍歷刪除之后的集合元素,必須重新使用.iterator() 再重新獲取迭代器實(shí)例劝贸,不能用刪除時(shí)的迭代器對(duì)象姨谷。
  • 如果不用迭代器對(duì)集合進(jìn)行循環(huán)遍歷,是不能直接在循環(huán)中對(duì)集合進(jìn)行增刪操作的映九。

Collection類

該類是層次結(jié)構(gòu)中的根接口梦湘,繼承超級(jí)接口Iterable<E>類。此接口不提供任何直接實(shí)現(xiàn)件甥,提供具體的子接口實(shí)現(xiàn):如List和Set捌议;


  • Collection類提供的方法,這些方法適用于它的所有子類引有。
  • add(E e) 添加一個(gè)元素瓣颅,如果添加失敗則返回false;
  • addAll(Collection(? extends E) c) 添加一個(gè)集合,這里如果被添加的集合中的某些元素已經(jīng)在要填加的集合里了譬正,則不會(huì)重復(fù)添加宫补。
  • clear() 清除所有元素;
  • contains(Object o) 如果此 collection 包含指定的元素曾我,則返回 true粉怕。
  • containsAll(Collection(? extends E) c) 如果此 collection 包含指定 collection 中的所有元素,則返回 true抒巢。
  • equals(Object o) 比較此 collection 與指定對(duì)象是否相等贫贝。
  • isEmpty() 判斷集合是否為空,是返回true;
  • iterator() 返回一個(gè)迭代器虐秦。
  • remove(Object o) 從此 collection 中移除指定元素的單個(gè)實(shí)例平酿,如果存在的話(可選操作)。
  • removeAll(Collection(? extends E) c) 移除兩個(gè)集合中都包含的元素悦陋。
  • retainAll(Collection(? extends E) c) 因保存兩個(gè)集合都包含的元素蜈彼。
  • size() 返回集合的元素?cái)?shù)量。
  • toArray() 返回包含此 collection 中所有元素的數(shù)組俺驶。

List類

  • 特點(diǎn):

  • 有序幸逆、可重復(fù),可以精準(zhǔn)的控制每一個(gè)元素的位置暮现。

  • 索引的下標(biāo)是從0開始的

  • 特殊的迭代器 ListIterator 允許元素插入和替換还绘,以及雙向訪問,可以從指定位置獲取迭代器栖袋。

  • 在 iterator拍顷、add、remove塘幅、equals 和 hashCode 方法的協(xié)定上加了一些其他約定昔案,超過(guò)了 Collection 接口中指定的約定尿贫。

  • 提供的方法:

  • add(E e) 在列表的尾部添加一個(gè)元素

  • add(int index, E e) 在列表的指定位置添加一個(gè)元素

  • addAll(Collection<? extends E> c) 添加指定 collection 中的所有元素到此列表的結(jié)尾,順序是指定 collection 的迭代器返回這些元素的順序(可選操作)踏揣。

  • addAll(int index, Collection<? extends E> c) 將指定 collection 中的所有元素都插入到列表中的指定位置庆亡。

  • get(int index) 獲得列表指定位置上的元素

  • indexOf(Object o) 返回此列表中第一次出現(xiàn)的指定元素的索引;如果此列表不包含該元素捞稿,則返回 -1又谋。

  • lastIndexOf(Object o) 返回此列表中最后出現(xiàn)的指定元素的索引;如果列表不包含此元素娱局,則返回 -1彰亥。

  • listIterator() 返回此列表元素的列表迭代器(按適當(dāng)順序)。

  • listIterator(int index) 返回列表中元素的列表迭代器(按適當(dāng)順序)铃辖,從列表的指定位置開始剩愧。

  • remove(Object o)從此列表中移除第一次出現(xiàn)的指定元素(如果存在)(可選操作)。

  • set(int index, E e) 用指定元素替換列表中指定位置的元素(可選操作)。

  • subList(int fromIndex, int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之間數(shù)據(jù)組成的集合穴翩。
    以上就是List類添加的或者相比Collection類的方法加了特殊限定的方法犬第,有些和Collection類相同的方法歉嗓,這里就沒有列出來(lái)!

ListIterator<E>類

列表迭代器(繼承 Iterator類)背蟆,允許程序員按任一方向遍歷列表、迭代期間修改列表带膀,并獲得迭代器在列表中的當(dāng)前位置。

  • 提供的方法:
  • add(E e) 將指定的元素插入列表(可選操作)垛叨。該元素直接插入到 next 返回的下一個(gè)元素的前面(如果有),或者 previous 返回的下一個(gè)元素之后(如果有)嗽元;如果列表沒有元素,那么新元素就成為列表中的唯一元素剂癌。
  • hasNext() 以正向遍歷列表時(shí),如果列表迭代器有多個(gè)元素佩谷,則返回 true辞做。
  • hasPrevious()如果以逆向遍歷列表,列表迭代器有多個(gè)元素寡具,則返回 true。
  • nextIndex() 返回對(duì) next 的后續(xù)調(diào)用所返回元素的索引
  • previousIndex() 返回對(duì) previous 的后續(xù)調(diào)用所返回元素的索引童叠。
  • next() 返回列表中的下一個(gè)元素。
  • previous() 返回列表中的前一個(gè)元素厦坛。
  • remove() 從列表中移除由 next 或 previous 返回的最后一個(gè)元素(可選操作)五垮。
  • set(E e) 用指定元素替換 next 或 previous 返回的最后一個(gè)元素(可選操作)。
代碼效果展示:
  • 正向迭代:


    圖片.png
  • 反向迭代:


    QQ截圖20170427193335.png

特別說(shuō)明:

  • 參照 Iterator類 的特別說(shuō)明杜秸。
  • 集合本身沒有數(shù)據(jù)放仗,那么hasNext()返回為false。
  • ListIterator 沒有當(dāng)前元素撬碟;它的光標(biāo)位置 始終位于調(diào)用 previous() 所返回的元素和調(diào)用 next() 所返回的元素之間诞挨。長(zhǎng)度為 n 的列表的迭代器有 n+1 個(gè)可能的指針位置。
  • 反向迭代獲取迭代器的方式實(shí)在指定位置反向獲取迭代器呢蛤,所以獲取的迭代器里的元素就是0,1,2,3,4集合中的前一半元素惶傻,正向則相反;
  • 如果采取指定位置的方式獲取迭代器其障,那么之后就一定要同樣采取位置方式獲取迭代器银室,不能再使用.listIterator()的方式獲取励翼;
  • 如果要進(jìn)行反向迭代蜈敢,必須要采用listIterator(int index)的方式獲取迭代器,其實(shí)這樣做是為了將迭代器的下標(biāo)移到指定位置汽抚,因?yàn)槟J(rèn)的迭代器的位置是在列表元素的前一個(gè)位置“-1”抓狭,如果不指定迭代器的下標(biāo),那么hasPrevious()返回一定是false殊橙,也就無(wú)法通過(guò)hasPrevious()進(jìn)行遍歷
  • 錯(cuò)誤寫法集:
  • 不能再循環(huán)next()方法或previous()不能和add()辐宾、remove()、set()方法共存膨蛮。


    圖片.png
  • 不能再循環(huán)中一直進(jìn)行刪除操作:


    錯(cuò)誤寫法

    錯(cuò)誤原因

    正確寫法:避免在最后一個(gè)next 后調(diào)用remove()方法
  • 不能再循環(huán)中一直進(jìn)行添加操作叠纹,不然會(huì)造成內(nèi)存溢出!


    錯(cuò)誤寫法

    正確寫法
  • 在一個(gè)迭代器循環(huán)里敞葛,set()方法誉察、add()方法、remove()方法不能共存惹谐。


    錯(cuò)誤寫法

ArrayList<E>

  • 特點(diǎn):
  • 底層存儲(chǔ)數(shù)據(jù)采用的是數(shù)組的形式持偏,但是數(shù)組的大小是可變的驼卖,但是變化的細(xì)節(jié)并沒有別指定鸿秆,可以添加空值。
  • 實(shí)現(xiàn)了List<E>接口桥胞,并且提供了一些可以操控自身存儲(chǔ)數(shù)據(jù)列表的數(shù)組的大小的方法考婴。
  • 此類實(shí)現(xiàn)不是同步的,如果多個(gè)線程同時(shí)訪問一個(gè) ArrayList 實(shí)例沥阱,而其中至少一個(gè)線程從結(jié)構(gòu)上修改了列表,那么它必須 保持外部同步策精。(結(jié)構(gòu)上的修改是指任何添加或刪除一個(gè)或多個(gè)元素的操作奔则,或者顯式調(diào)整底層數(shù)組的大小易茬;僅僅設(shè)置元素的值不是結(jié)構(gòu)上的修改)可以在創(chuàng)建的時(shí)候用Collections.synchronizedList方法將對(duì)象“包裝起來(lái)”抽莱。

List list = Collections.synchronizedList(new ArrayList(...));

  • 提供的方法:
  • 構(gòu)造方法:
  • ArrayList() 構(gòu)造一個(gè)初始化容量為10的空列表
  • ArrayList(Collection<? extends E> c) 構(gòu)造一個(gè)包含指定 collection 的元素的列表骄恶,
  • ArrayList(int initialCapacity) 構(gòu)造一個(gè)具有指定初始容量的空列表。
  • 方法摘要:List接口提供的方法同樣適虐呻,這里就不重復(fù)列出
    • clone() 返回此 ArrayList 實(shí)例的淺表副本寞秃。返回類型是Object類型
    • ensureCapacity(int minCapacity) 增加列表實(shí)例的數(shù)量大小。
    • removeRange(int fromIndex, int toIndex) 移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之間的所有元素朗涩。
    • trimToSize() 將此 ArrayList 實(shí)例的容量調(diào)整為列表的當(dāng)前大小绑改。

LinkedList<E>類

  • 特點(diǎn):
  • List接口的鏈接列表的實(shí)現(xiàn)兄一,允許null元素出革。
  • 為列表的結(jié)構(gòu)操作提供了很多的操作方法渡讼,方便插入刪除操作!
  • 此類實(shí)現(xiàn)不是同步的硝全,如果多個(gè)線程同時(shí)訪問一個(gè) ArrayList 實(shí)例,而其中至少一個(gè)線程從結(jié)構(gòu)上修改了列表析藕,那么它必須 保持外部同步凳厢。(結(jié)構(gòu)上的修改是指任何添加或刪除一個(gè)或多個(gè)元素的操作,或者顯式調(diào)整底層數(shù)組的大兄文唷遮精;僅僅設(shè)置元素的值不是結(jié)構(gòu)上的修改)可以在創(chuàng)建的時(shí)候用Collections.synchronizedList方法將對(duì)象“包裝起來(lái)”。

List list = Collections.synchronizedList(new ArrayList(...));

  • 方法:

  • 構(gòu)造方法:

  • LinkedList() 構(gòu)造一個(gè)空的列表

  • LinkedList() 構(gòu)造一個(gè)包含指定 collection 中的元素的列表准脂。

  • 方法摘要:

  • addFirst(E e) 在列表的頭部插入指定元素

  • addLast(E e) 在列表的結(jié)尾插入指定的元素

  • clone() 返回此 ArrayList 實(shí)例的淺表副本檬洞。返回類型是Object類型

  • descendingIterator() 返回以逆向順序在此雙端隊(duì)列的元素上進(jìn)行迭代的迭代器。

  • element() 獲取但不移除此列表的頭(第一個(gè)元素)添怔。

  • getFrist() 返回此列表的第一個(gè)元素。

  • getLast() 返回此列表的最后一個(gè)元素砾脑。

  • listIterator() 返回此列表中的元素的列表迭代器(按適當(dāng)順序)性昭,從列表中指定位置開始。

  • offer(E e) 將指定元素添加到此列表的結(jié)尾

  • offerFirst(E e) 在此列表的開頭插入指定的元素汹族。

  • offerLast(E e) 在此列表末尾插入指定的元素。

  • peek() 獲取但不移除此列表的頭(第一個(gè)元素)夸政。

  • peekFirst() 獲取但不移除列表的第一個(gè)元素榴徐,如果列表為空,則返回null坑资;

  • peekLast() 獲取但不移除此列表的最后一個(gè)元素;如果此列表為空仿便,則返回 null攒巍。

  • poll() 獲取并移除列表的第一個(gè)元素

  • pollFirst() 獲取并移除此列表的第一個(gè)元素;如果此列表為空闻坚,則返回 null兢孝。

  • pollLast() 獲取但不移除此列表的最后一個(gè)元素;如果此列表為空跨蟹,則返回 null。

  • pop()從此列表所表示的堆棧處彈出一個(gè)元素。等同于removeFirst()威恼,如果列表為空則拋出異常。

  • push(E e) 將元素推入此列表所表示的堆棧腹备。等同于addFirst(E e)

  • remove() 獲取并移除此列表的頭(第一個(gè)元素)斤蔓。

  • removeFirst() 移除并返回此列表的第一個(gè)元素。

  • removeFirstOccurrence(Object o) 從此列表中移除第一次出現(xiàn)的指定元素(從頭部到尾部遍歷列表時(shí))友驮。

  • removeLast() 移除并返回此列表的最后一個(gè)元素。

  • removeLastOccurrence(Object o) 從此列表中移除最后一次出現(xiàn)的指定元素(從頭部到尾部遍歷列表時(shí))卸留。

  • 代碼實(shí)例:


    簡(jiǎn)單方法

ArrayList和LinkedList的區(qū)別:

Type | Get | Iteration |Insert |Remove
----|------|----
ArrayList | 110 | 490 |3790 |8730
LinkedList | 1980 | 220 |110 |110
從上表中可以看到ArrayList善于訪問數(shù)據(jù)耻瑟,不善于插入和刪除,而LinkedList恰恰相反喳整;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末框都,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瞬项,更是在濱河造成了極大的恐慌,老刑警劉巖猪杭,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皂吮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蜂筹,警方通過(guò)查閱死者的電腦和手機(jī)芦倒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門兵扬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人器钟,你說(shuō)我怎么就攤上這事〗澹” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵穆役,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我播歼,道長(zhǎng)掰读,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任烁试,我火速辦了婚禮拢肆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郭怪。我一直安慰自己,他們只是感情好颂鸿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布攒庵。 她就那樣靜靜地躺著,像睡著了一般栽渴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闲擦,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天佛致,我揣著相機(jī)與錄音,去河邊找鬼。 笑死感昼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜕琴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼上炎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼雏搂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起凸郑,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤芙沥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后而昨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡着憨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年享扔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了植袍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氛魁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秀存,到底是詐尸還是另有隱情,我是刑警寧澤或链,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布档押,位于F島的核電站祈纯,受9級(jí)特大地震影響腕窥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜簇爆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一爽撒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧安寺,春花似錦、人聲如沸挑庶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凳枝。三九已至,卻和暖如春岖瑰,著一層夾襖步出監(jiān)牢的瞬間砂代,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工露戒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人智什。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓丁屎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親节沦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子键思,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

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

  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 869評(píng)論 0 1
  • 寫在前面自開始在公司實(shí)習(xí)以來(lái)看蚜,經(jīng)常都要用到集合框架。不僅后臺(tái)要用供炎,在前臺(tái)做數(shù)據(jù)交互的時(shí)候用得也多。所以我想著是時(shí)候...
    EakonZhao閱讀 3,257評(píng)論 0 12
  • 上一篇我們說(shuō)完了List類和其一些常用的子實(shí)現(xiàn)類惨奕,這篇我們說(shuō)下Set類和其常用的子實(shí)現(xiàn)類竭钝;集合類的相關(guān)總結(jié)(一) ...
    MLLWF閱讀 314評(píng)論 0 2
  • 這幾天網(wǎng)路上熱鬧異常,關(guān)于“成都司機(jī)頻繁變道惹怒男司機(jī)香罐,遭遇當(dāng)街暴打至骨折”的消息被炒得沸沸揚(yáng)揚(yáng)。是非曲直港粱,眾說(shuō)紛...
    岑飛君閱讀 5,138評(píng)論 20 13
  • 123圖書館館長(zhǎng)MPDQ “0”該活動(dòng)與本工作無(wú)關(guān) “1”該活動(dòng)只占本工作的一小部分且重要程度不高 “2”有兩項(xiàng)活...
    傾城故閱讀 224評(píng)論 0 0