Java集合框架Collection 接口 #yyds干貨盤點(diǎn)#

      網(wǎng)友投稿 659 2022-05-28

      Collection 接口

      所有通用集合實(shí)現(xiàn)都有一個(gè)帶有 Collection 參數(shù)的構(gòu)造函數(shù),此構(gòu)造函數(shù)初始化新集合以包含指定集合中的所有元素,即它允許轉(zhuǎn)換集合的類型。

      如把一個(gè) Collection s,它可以轉(zhuǎn)化成 List、Set 或其他類型的 Collection。如:

      List s = new ArrayList(c);

      Collection 接口包含執(zhí)行基本操作的方法:

      int size()

      boolean isEmpty()

      boolean contains(Object element

      boolean add(E element)

      boolean remove(Object element)

      Interator interator()

      Collection 接口還包含對(duì)整個(gè)集合進(jìn)行操作的方法:

      boolean containsAll(Collection c)

      boolean addAll(Collection c)

      boolean removeAll(Collection c)

      boolean retainAll(Collection c)

      void clear()

      Collection 接口還存在用于數(shù)組操作的附加方法,例如:

      Object[] toArray()

      T[] toArray(T[] a)

      JDK 8 及更高版本中,Collection 接口還公開方法 Stream stream() 和 Stream parallelStream(),幫助從底層集合中獲取順序或并行流。

      public interface Collection { boolean add(E element); Interator iterator(); // 返回一個(gè)用于訪問集合中各個(gè)元素的迭代器}

      add 方法用于向集合中添加元素。如果成功添加元素改變了集合就返回 true;如果集合沒有發(fā)生改變就返回 false。比如在集合( set )中添加一個(gè)對(duì)象,如果這個(gè)元素在集合中已經(jīng)存在,這時(shí) add 方法就沒有奏效,因?yàn)榧现胁辉试S有重復(fù)的對(duì)象。

      interator 方法用于返回一個(gè)實(shí)現(xiàn)了 Interator 接口的對(duì)象,可以使用這個(gè)迭代器對(duì)象依次訪問集合中的元素。

      集合遍歷接口--迭代器

      Iterator 接口包含 4 個(gè)方法:

      public interface Interator { E next(); // 返回將要訪問的下一個(gè)對(duì)象。如果已經(jīng)到達(dá)了集合的末尾,將拋出一個(gè) NoSuchElement-Exception boolean hasNext(); // 如果存在另一個(gè)可訪問的元素,返回 true void remove(); // 刪除上次訪問的對(duì)象。這個(gè)方法必須緊跟在訪問一個(gè)元素之后執(zhí)行。如果上次訪問之后集合已經(jīng)發(fā)生了變化,這個(gè)方法將會(huì)拋出一個(gè) IllegalStateException default void forEachRemaining(Consumer action); // 訪問元素,并傳遞到指定的動(dòng)作,直到再?zèng)]有更多元素,或者這個(gè)動(dòng)作拋出一個(gè)異常}

      通過(guò)反復(fù)調(diào)用 next 方法,可以逐個(gè)訪問集合中的每個(gè)元素。但是,如果到達(dá)了集合的末尾,next 方法將拋出一個(gè) NoSuchElementException 。因此,在需要調(diào)用 next 之前調(diào)用 hasNext 方法。

      hashNext 如果迭代器對(duì)象還有多個(gè)可以訪問的元素,這個(gè)方法就返回 true。

      Collection c = ...;Interator iter = c.iterator();while (iter.hasNext()) { String element = iter.next(); // do something with element}

      用 for each 循環(huán)可以更加簡(jiǎn)練地表達(dá)同樣的循環(huán)操作:

      for (String element : c) { // do something with element System.out.Println(element);}

      Java集合框架之 Collection 接口 #yyds干貨盤點(diǎn)#

      for each 循環(huán)可以處理任何實(shí)現(xiàn)了 Iterable 接口的對(duì)象,這個(gè)對(duì)象只包含一個(gè)抽象方法:

      public interface Iterable { Iterator iterator();}

      JDK8 及更高版本中,迭代集合的首選方法是獲取流并對(duì)其執(zhí)行聚合操作。聚合操作需要與 Lambda 表達(dá)式結(jié)合使用,以使用較少的代碼使編程更具表現(xiàn)力。

      myShapeCollection.stream() .filter(e -> e.getColor() == Color.RED) .forEach(e -> System.out.Println(e.getName()));

      訪問元素的順序取決于集合類型。

      如果迭代處理一個(gè) ArrayList,迭代器索引從 0 開始,沒迭代一次,索引值加 1 。

      如果訪問 HashSet 中的元素,會(huì)按照一種基本上隨機(jī)的順序獲得元素。(每一次訪問的順序都是唯一的)

      Iterator 接口的 remove 方法將會(huì)刪除上次調(diào)用 next 方法時(shí)返回的元素。目的是:刪除某個(gè)元素前最該先看一下這個(gè)元素。

      集合接口批量操作

      批量操作對(duì)整個(gè)集合執(zhí)行操作。包含基本的方法有:

      contailsAll ?: 如果目標(biāo) Collection 包含指定 Collection 中的所有元素,就返回 true。

      addAll ?: 將指定 Collection 中的所有元素添加到目標(biāo) Collection。

      removeAll ?: 從目標(biāo) Collection 中刪除包含在指定 Collection 中的所有元素。

      retainAll ?: 從目標(biāo) Collection 中刪除所有所有未包含在指定 Collection 中刪除所有未包含在指定 Collection 中的元素。

      clear ?: 從集合中刪除所有元素。

      如,檢測(cè)任意集合是否包含指定元素的泛型方法:

      public static boolean contains(Collection c, Object obj) { for (E element : c) if (element.equals(obj)) return true; return false;}

      其他方法

      還有一些實(shí)用方法非常有用,應(yīng)該將它們提供給用戶實(shí)用。下面列舉一部分:

      int size() // 返回當(dāng)前存儲(chǔ)在集合中的元素個(gè)數(shù)boolean isEmpty() // 如何集合中沒有元素,返回 trueboolean contains(Object obj) // 如果集合中包含了一個(gè)與obj相等的元素,返回trueboolean equals(Object other) // 如果集合與 other 集合相等,返回trueboolean add(E element) // 將一個(gè)元素添加到集合中。由于這個(gè)調(diào)用改變了集合,返回 trueboolean addAll(Collection from) // 將 other 集合中的所有元素添加到這個(gè)集合。如果由于這個(gè)調(diào)用改變了這個(gè)集合,返回trueboolean remove(Object obj) // 從這個(gè)集合中刪除等于 obj 的對(duì)象。如果有匹配的對(duì)象被刪除,返回trueboolean removeAll(Collection c) // 從這個(gè)集合中刪除obj集合中存在的所有元素。如果這個(gè)調(diào)用改變了集合,返回truedefault boolean removeIf(Predicate filter // JDK8, 從這個(gè)集合中刪除filter返回true的所有元素,如果因?yàn)檫@個(gè)調(diào)用改變了集合,返回truevoid clear() // 從這個(gè)集合中刪除所有的元素boolean retainAll(Collection c) // 從這個(gè)集合中刪除所有與other集合元素不同的元素。如果由于這個(gè)調(diào)用改變了集合,返回trueObject[] toArray() // 返回這個(gè)集合中的對(duì)象的數(shù)組 T[] toArray(T[] arrayToFill)

      T[] toArray(T[] arrayToFill) :返回這個(gè)集合中的對(duì)象的數(shù)組。如果 arrayToFill 足夠大,就將集合中的元素填入這個(gè)數(shù)組中,剩余空間填補(bǔ) null;否則,分配一個(gè)新數(shù)組,其成員類型與 arrayToFill 的成員類型相同,其長(zhǎng)度等于集合的大小,并填充集合元素。

      Reference: Java 核心技術(shù) 卷 1 :基礎(chǔ)知識(shí)(原書第11版)

      Java 數(shù)據(jù)結(jié)構(gòu)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:linux pycharm 數(shù)字鍵盤失效
      下一篇:EVS快速入門【玩轉(zhuǎn)華為云】
      相關(guān)文章
      亚洲av无一区二区三区| 自拍日韩亚洲一区在线| 亚洲国产精品人久久电影| 亚洲第一视频网站| 亚洲精品视频免费| 亚洲色无码专区一区| 亚洲日韩精品A∨片无码加勒比| 亚洲av一本岛在线播放| 亚洲AV男人的天堂在线观看| 国产精品亚洲精品青青青| 久久亚洲国产成人影院| 亚洲an日韩专区在线| 伊人久久五月丁香综合中文亚洲| 亚洲国产视频久久| 亚洲国产美女精品久久久| mm1313亚洲国产精品无码试看| 亚洲1区2区3区精华液| 亚洲AV无码乱码在线观看牲色| 国产AV日韩A∨亚洲AV电影| 亚洲自偷自偷在线成人网站传媒 | 色在线亚洲视频www| 亚洲日本久久久午夜精品| 亚洲一久久久久久久久| 亚洲日韩AV一区二区三区中文| 亚洲AV无码一区二区三区性色 | 久久精品亚洲中文字幕无码网站| 亚洲成年轻人电影网站www| 91亚洲导航深夜福利| 亚洲免费在线视频观看| 亚洲综合色婷婷在线观看| 精品国产亚洲AV麻豆| 亚洲人成网站在线观看青青| 国产亚洲av片在线观看播放| 亚洲成色www久久网站夜月| 亚洲高清视频在线播放| 亚洲国产精品无码久久久| 7777久久亚洲中文字幕| 国产精品亚洲一区二区在线观看| 亚洲精品视频在线看| 亚洲高清专区日韩精品| 亚洲最大中文字幕|