成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Java? 教程(Collection接口)

lncwwn / 895人閱讀

Collection接口

Collection表示一組稱為其元素的對(duì)象,Collection接口用于傳遞需要最大通用性的對(duì)象集合,例如,按照慣例,所有通用集合實(shí)現(xiàn)都有一個(gè)帶有Collection參數(shù)的構(gòu)造函數(shù),此構(gòu)造函數(shù)(稱為轉(zhuǎn)換構(gòu)造函數(shù))初始化新集合以包含指定集合中的所有元素,無論給定集合的子接口或?qū)崿F(xiàn)類型如何,換句話說,它允許你轉(zhuǎn)換集合的類型。

例如,假設(shè)你有一個(gè)Collection c,它可以是ListSet或其他類型的Collection,這個(gè)語法創(chuàng)建一個(gè)新的ArrayListList接口的一個(gè)實(shí)現(xiàn)),初始化包含c中的所有元素。

List list = new ArrayList(c);

或者 — 如果你使用的是JDK 7或更高版本 — 你可以使用菱形運(yùn)算符:

List list = new ArrayList<>(c);

Collection接口包含執(zhí)行基本操作的方法,例如int size()boolean isEmpty()、boolean contains(Object element)boolean add(E element)、boolean remove(Object element)Iterator iterator()。

它還包含對(duì)整個(gè)集合進(jìn)行操作的方法,例如boolean containsAll(Collection c)、boolean addAll(Collection c)、boolean removeAll(Collection c)、boolean retainAll(Collection c)void clear()。

還存在用于數(shù)組操作的額外方法(諸如Object[] toArray() T[] toArray(T[] a))。

在JDK 8及更高版本中,Collection接口還公開方法Stream stream()Stream parallelStream(),以從底層集合中獲取順序或并行流(有關(guān)使用流的更多信息,請(qǐng)參閱聚合操作的課程)。

如果Collection表示一組對(duì)象,Collection接口可以滿足你的期望,它有告訴你集合中有多少元素(sizeisEmpty)的方法,檢查給定對(duì)象是否在集合中的方法(contains),從集合中添加和刪除元素的方法(addremove),和在集合上提供迭代器的方法(iterator)。

add方法的定義已經(jīng)足夠廣泛,因此對(duì)于允許重復(fù)的集合以及不重復(fù)的集合都有意義,它保證Collection在調(diào)用完成后將包含指定的元素,并且如果Collection因調(diào)用而更改,則返回true。類似地,remove方法旨在從Collection中刪除指定元素的單個(gè)實(shí)例,假設(shè)它包含要開始的元素,并且如果結(jié)果修改了集合則返回true

遍歷集合

有三種遍歷集合的方法:(1)使用聚合操作(2)for-each構(gòu)造(3)通過使用Iterators。

聚合操作

在JDK 8及更高版本中,迭代集合的首選方法是獲取流并對(duì)其執(zhí)行聚合操作,聚合操作通常與lambda表達(dá)式結(jié)合使用,以使編程更具表現(xiàn)力,使用更少的代碼行,以下代碼按順序遍歷一組形狀并打印出紅色對(duì)象:

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

同樣,你可以輕松地請(qǐng)求并行流,如果集合足夠大并且你的計(jì)算機(jī)具有足夠的核心,這可能是有意義的:

myShapesCollection.parallelStream()
.filter(e -> e.getColor() == Color.RED)
.forEach(e -> System.out.println(e.getName()));

使用此API收集數(shù)據(jù)的方法有很多種,例如,你可能希望將Collection的元素轉(zhuǎn)換為String對(duì)象,然后將它們連接起來,用逗號(hào)分隔:

String joined = elements.stream()
    .map(Object::toString)
    .collect(Collectors.joining(", "));

或者可以把所有員工的工資加起來:

int total = employees.stream()
.collect(Collectors.summingInt(Employee::getSalary)));

這些只是你可以使用流和聚合操作執(zhí)行的一些示例,有關(guān)更多信息和示例,請(qǐng)參閱聚合操作的課程。

集合框架一直提供許多所謂的“批量操作”作為其API的一部分,這些包括對(duì)整個(gè)集合進(jìn)行操作的方法,例如containsAlladdAll、removeAll等,不要將這些方法與JDK 8中引入的聚合操作混淆。新聚合操作與現(xiàn)有批量操作(containsAll、addAll等)之間的主要區(qū)別在于舊版本都是可變的,這意味著它們都修改了底層集合,相反,新的聚合操作不會(huì)修改底層集合。使用新的聚合操作和lambda表達(dá)式時(shí),必須注意避免突變,以免在以后從并行流運(yùn)行代碼時(shí)引入問題。

for-each構(gòu)造

for-each構(gòu)造允許你使用for循環(huán)簡明地遍歷集合或數(shù)組 — 請(qǐng)參閱for語句,以下代碼使用for-each構(gòu)造在多帶帶的行上打印出集合的每個(gè)元素。

for (Object o : collection)
    System.out.println(o);
迭代器

Iterator是一個(gè)使你可以遍歷集合并需要時(shí)有選擇地從集合中刪除元素的對(duì)象,通過調(diào)用iterator方法獲得集合的Iterator,以下是Iterator接口。

public interface Iterator {
    boolean hasNext();
    E next();
    void remove(); //optional
}

如果迭代具有更多元素,則hasNext方法返回true,并且next方法返回迭代中的下一個(gè)元素,remove方法從底層Collection中刪除next返回的最后一個(gè)元素,對(duì)next的每次調(diào)用只能調(diào)用remove方法一次,如果違反此規(guī)則則拋出異常。

請(qǐng)注意,Iterator.remove是在迭代期間修改集合的唯一安全方法,如果在迭代進(jìn)行過程中以任何其他方式修改底層集合,則不指定此行為。

使用Iterator而不是for-each構(gòu)造,當(dāng)你需要:

刪除當(dāng)前元素,for-each構(gòu)造隱藏了迭代器,因此你無法調(diào)用remove,因此,for-each構(gòu)造不可用于過濾。

并行迭代多個(gè)集合。

以下方法說明如何使用Iterator過濾任意Collection — 即遍歷集合刪除特定元素。

static void filter(Collection c) {
    for (Iterator it = c.iterator(); it.hasNext(); )
        if (!cond(it.next()))
            it.remove();
}

這段簡單的代碼是多態(tài)的,這意味著無論實(shí)現(xiàn)如何,它都適用于任何Collection,此示例演示了使用Java集合框架編寫多態(tài)算法是多么容易。

集合接口批量操作

批量操作對(duì)整個(gè)Collection執(zhí)行操作,你可以使用基本操作實(shí)現(xiàn)這些簡寫操作,但在大多數(shù)情況下,此類實(shí)現(xiàn)效率較低,以下是批量操作:

containsAll — 如果目標(biāo)Collection包含指定Collection中的所有元素,則返回true。

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

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

retainAll — 從目標(biāo)Collection中刪除所有未包含在指定Collection中的元素,也就是說,它僅保留目標(biāo)Collection中也包含在指定Collection中的那些元素。

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

如果在執(zhí)行操作的過程中修改了目標(biāo)Collection,則addAll、removeAllretainAll方法都返回true。

作為批量操作功能的一個(gè)簡單示例,請(qǐng)考慮以下語法,從Collection c中刪除指定元素e的所有實(shí)例。

c.removeAll(Collections.singleton(e));

更具體地說,假設(shè)你要從Collection中刪除所有null元素。

c.removeAll(Collections.singleton(null));

這個(gè)語法使用Collections.singleton,這是一個(gè)靜態(tài)工廠方法,它返回一個(gè)只包含指定元素的不可變Set。

集合接口數(shù)組操作

toArray方法是作為集合和舊API之間的橋梁提供的,這些API期望輸入上的數(shù)組,數(shù)組操作允許將Collection的內(nèi)容轉(zhuǎn)換為數(shù)組,沒有參數(shù)的簡單形式創(chuàng)建一個(gè)新的Object數(shù)組,更復(fù)雜的形式允許調(diào)用者提供數(shù)組或選擇輸出數(shù)組的運(yùn)行時(shí)類型。

例如,假設(shè)cCollection,以下代碼段將c的內(nèi)容轉(zhuǎn)儲(chǔ)到新分配的Object數(shù)組中,該數(shù)組的長度與c中的元素?cái)?shù)相同。

Object[] a = c.toArray();

假設(shè)已知c只包含字符串(可能因?yàn)?b>c的類型為Collection),以下代碼段將c的內(nèi)容轉(zhuǎn)儲(chǔ)到新分配的String數(shù)組中,該數(shù)組的長度與c中的元素?cái)?shù)相同。

String[] a = c.toArray(new String[0]);
上一篇:集合接口 下一篇:Set接口

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/73098.html

相關(guān)文章

  • Java? 教程(集合接口

    集合接口 核心集合接口封裝了不同類型的集合,如下圖所示,這些接口允許獨(dú)立于其表示的細(xì)節(jié)來操縱集合,核心集合接口是Java集合框架的基礎(chǔ),如下圖所示,核心集合接口形成層次結(jié)構(gòu)。 showImg(https://segmentfault.com/img/bVbntJW?w=402&h=146); Set是一種特殊的Collection,SortedSet是一種特殊的Set,依此類推,另請(qǐng)注意,層次結(jié)構(gòu)...

    elisa.yang 評(píng)論0 收藏0
  • Java? 教程(Set接口

    Set接口 Set是一個(gè)不能包含重復(fù)元素的Collection,它模擬了數(shù)學(xué)集抽象,Set接口僅包含從Collection繼承的方法,并添加禁止重復(fù)元素的限制,Set還為equals和hashCode操作的行為添加了一個(gè)更強(qiáng)的契約,允許Set實(shí)例有意義地進(jìn)行比較,即使它們的實(shí)現(xiàn)類型不同,如果兩個(gè)Set實(shí)例包含相同的元素,則它們是相等的。 Java平臺(tái)包含三個(gè)通用的Set實(shí)現(xiàn):HashSet、Tre...

    Apollo 評(píng)論0 收藏0
  • Java? 教程(List接口

    List接口 List是一個(gè)有序的Collection(有時(shí)稱為序列),列表可能包含重復(fù)元素,除了從Collection繼承的操作之外,List接口還包括以下操作: 位置訪問 — 根據(jù)列表中的數(shù)字位置操縱元素,這包括get、set、add、addAll和remove等方法。 搜索 — 搜索列表中的指定對(duì)象并返回其數(shù)字位置,搜索方法包括indexOf和lastIndexOf。 迭代 — 擴(kuò)展Ite...

    hedzr 評(píng)論0 收藏0
  • Java? 教程(Queue接口

    Queue接口 Queue是在處理之前保存元素的集合,除了基本的Collection操作外,隊(duì)列還提供額外的插入、刪除和檢查操作,Queue接口如下。 public interface Queue extends Collection { E element(); boolean offer(E e); E peek(); E poll(); E remov...

    RayKr 評(píng)論0 收藏0
  • Java? 教程(Map接口

    Map接口 Map是將鍵映射到值的對(duì)象,map不能包含重復(fù)的鍵:每個(gè)鍵最多可以映射一個(gè)值,它模擬數(shù)學(xué)函數(shù)抽象。Map接口包括基本操作的方法(如put、get、remove、containsKey、containsValue、size和empty),批量操作(如putAll和clear)和集合視圖(如keySet、entrySet和values)。 Java平臺(tái)包含三個(gè)通用Map實(shí)現(xiàn):HashMap...

    Kahn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<