摘要:集合的元素個數為輸出集合的元素個數為在本代碼中,新建一個局部變量保存的成員方法返回的值,輸出得到因為只有一個元素。注若遍歷集合的同時改變集合,將引發異常。
????在概述里面也說過:Collection是java集合兩大接口之一,旗下有三大子接口:Set(元素不能重復,且無序)、Queue、List(元素可重復,且有序)。
????Collection來源于java.util包,主要方法包括:
主要方法 | 作用 | |
boolean add(Object o) | 將傳入的Object對象添加到容器中,添加后方法返回true | |
boolean addAll(Collection c) | 將傳入的集合c中的所有對象添加到容器中,添加后方法返回true | |
void clear() | 清空集合,集合長度變為0 | |
boolean contains(Object o) | 檢查集合是否存在對象o,若存在返回true | |
boolean containsAll(Collection c) | 檢查集合是否存在集合c的所有對象,若存在返回true | |
boolean isEmpty() | 返回集合的size是否為0 | |
Iterator iterator() | 返回Iterator對象 | |
boolean remove(Object o) | 刪除集合中第一個符合條件的元素,若集合存在對象o,刪除并返回true | |
boolean removeAll(Collection c) | 刪除集合中所有與集合c重合的元素,若刪除后對象進行了改變返回true | |
boolean retainAll(Collection c) | 刪除集合中所有與集合c不重合的元素,若刪除后對象進行了改變返回true | |
int size() | 返回集合元素的個數 | |
Object[] toArray() | 把集合轉變成數組,集合的元素變成對應的數組元素 |
????下面是Collection的實例化以及各成員方法的使用方法
實例化
Collection c1=new TreeSet(); Collection c2=new HashSet(); Collection c3=new LinkedHashSet(); Collection c4=new ArrayDeque(); Collection c5=new ArrayList(); Collection c6=new LinkedList();
boolean isEmpty();
boolean isEmpty=c5.isEmpty(); System.out.print(isEmpty?"c5為空":"c5不為空");
輸出: c5為空
????因為c5在此之前并沒有添加任何元素,所以為空。
Iterator iterator();
Iterator it5=c5.iterator(); while(it5.hasNext()) { System.out.println("集合5元素:"+it5.next()); }
輸出:集合5元素:5
????注:每個Iterator對象只能使用一次, 復用會導致java.util.ConcurrentModificationException。
????在本代碼中,新建了一個局部變量it5保存c5的迭代器,再通過迭代器的成員方法hasNext判斷是否存在下一元素,若true,輸出此元素。
????java8為Collection的遍歷新增了一個來源于Collection的父接口iterable的方法:forEach(Consumer action)。
c5.forEach(obj->System.out.println("集合元素為"+obj));
輸出:集合元素為5
boolean add(Object o);
c5.add(5); Iterator it=c5.iterator(); while(it.hasNext()) { System.out.println("集合元素:"+it.next()); }
輸出:集合元素:5
????在本代碼中,c5被添加了一個元素5,所以經過迭代器輸出只能得到5。
boolean addAll(Collection c);
c6.addAll(c5); Iterator it6=c6.iterator(); while(it6.hasNext()) { System.out.println("集合6元素:"+it6.next()); }
輸出:集合6元素:5
????在本代碼中,c5中的所有元素(5)被整體添加到c6中,所以c6迭代輸出5。
void clear();
c6.clear(); Iterator it6=c6.iterator(); while(it6.hasNext()) { System.out.println("集合6元素:"+it6.next()); }
無輸出
????在本代碼中,c6被清空,所以迭代輸出并沒有結果。
boolean contains(Object o);
boolean isContainsFive=c5.contains(5); boolean isContainsSix=c5.contains(6); System.out.println("c5是否存在元素5:"+isContainsFive); System.out.println("c5是否存在元素6:"+isContainsSix);
輸出:c5是否存在元素5:true c5是否存在元素6:false
????在本代碼中,isContainsFive的值取決于c5是否含有元素5(isContainsSix亦是如此)。而c5只有一個元素5,所以isContainsFive的值為true,isContainsSix的值為false。
boolean containsAll(Collection c);
c4.addAll(c5); System.out.println("c5是否包括c6的全部元素:"+c5.containsAll(c4)); c4.add(3); System.out.println("c5是否包括c6的全部元素:"+c5.containsAll(c4));
輸出:c5是否包括c6的全部元素:true c5是否包括c6的全部元素:false
????在本代碼中,首先將c5的所有元素(5)添加到c4中,所以第一個輸出語句必定為true。但是在第一個語句后c4添加了一個新的元素3,所以第二個輸出語句為false。
boolean remove(Object o);
c5.add(6); Iterator it5=c5.iterator(); while(it5.hasNext()) { System.out.println("集合元素:"+it5.next()); } c5.remove(6); Iterator aIt5=c5.iterator(); while(aIt5.hasNext()) { System.out.println("集合5元素:"+aIt5.next()); }
輸出:集合5元素:5 集合5元素:6 集合5元素:5
????在本代碼中,c5首先添加了一個新元素6,迭代輸出得到5、6。然后調用c5的成員方法remove,迭代輸出得到5。
boolean removeAll(Collection c);
c5.removeAll(c4); Iterator aIt5=c5.iterator(); while(aIt5.hasNext()) { System.out.println("集合5元素:"+aIt5.next()); }
無輸出
????在本代碼中,c5移除掉c4中的所有元素(3、5),可以理解為移除掉兩個集合的交集,所以迭代輸出沒有結果。
boolean retainAll(Collection c);
c5.add(5); c4.retainAll(c5); Iterator it4=c4.iterator(); while(it4.hasNext()) { System.out.println("集合4元素:"+it4.next()); }
輸出:集合4元素:5
????注:因為在方法9中集合5已經變成空集合,所以在此方法中將5添加到集合5中以做演示。
????在本方法中,c5添加了一個元素5,然后調用c4的成員方法retainAll刪除掉不屬于c5的所有元素,迭代輸出5。
int size();
int size=c4.size(); System.out.println("集合4的元素個數為:"+size);
輸出:集合4的元素個數為:1
????在本代碼中,新建一個局部變量size保存c4的成員方法size返回的值,輸出得到1(因為c4只有一個元素5)。
Object[] toArray();
System.out.println(c4.toArray());
輸出:[Ljava.lang.Object;@71e7a66b
????作為對比,我嘗試調用父類Object的String toString()方法,結果得到了[5],與直接輸出對象的結果是一致的。
????注:若遍歷集合的同時改變集合,將引發ConcurrentModificationException異常。
????Collection接口就寫到這里了,看起來簡單,但是某些成員方法需要查看源碼才知道如何去用,基本上寫完這篇博文,我對Collection已經有了比較深入的了解,忽然覺得寫作跟編程是相輔相成的。
????一點題外話:這是我第一次系統地寫博文,懂得了一個道理:世界上沒有簡單的事。寫的不好請多多見諒。之后要狠狠提高一下我的寫作水平,之前寫公眾號的文筆都不知道丟在哪里了。
????如果你還想了解關于java集合的內容,歡迎點擊https://segmentfault.com/a/11...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74419.html
摘要:如果需要創建對象,則必須與一個被迭代的集合。這是一個有狀態的方法該方法用于保證對該流的后續訪問中最大允許訪問的元素個數。可以對集合元素進行整體的聚集操作。 Java集合分為Set(無序、不可重復)、List(有序、重復)、Queue(隊列)和Map(映射關系) Java集合概述 數組元素既可以是基本類型的值,也可以是對象(實際保存對象的引用變量)集合只能保存對象(實際保存對象的引用變量...
集合接口 核心集合接口封裝了不同類型的集合,如下圖所示,這些接口允許獨立于其表示的細節來操縱集合,核心集合接口是Java集合框架的基礎,如下圖所示,核心集合接口形成層次結構。 showImg(https://segmentfault.com/img/bVbntJW?w=402&h=146); Set是一種特殊的Collection,SortedSet是一種特殊的Set,依此類推,另請注意,層次結構...
摘要:集合類主要負責保存盛裝其他數據,因此集合類也被稱為容器類。所有的集合類都位于包下。表示一組對象,這些對象也稱為的元素。成員方法把集合轉成數組迭代器,集合的專用遍歷方式之接口概述有序的,也稱為序列。 前言 在編程中,常常需要集中存放多個數據。從傳統意義上講,數組是我們的一個很好的選擇,前提是我們實現已經明確知道我們將要保存的對象的數量。 一旦在數組初始化時指定了數組長度,這個數組長度就...
摘要:集合框架的基本接口類層次結構其中表示接口,表示實現類和在實際開發中,需要將使用的對象存儲于特定數據結構的容器中。實例是迭代器,擁有兩個方法方法迭代器用于遍歷集合元素。返回值則是轉換后的數組,該數組會保存集合中的所有元素。 Java Collections Framework是Java提供的對集合進行定義,操作,和管理的包含一組接口,類的體系結構。 Java集合框架的基本接口/類層次結構...
摘要:接口也是集合中的一員,但它與接口有所不同,接口與接口主要用于存儲元素,而主要用于迭代訪問即遍歷中的元素,因此對象也被稱為迭代器。迭代器的實現原理我們在之前案例已經完成了遍歷集合的整個過程。 【Collection、泛型】 主要內容 Collection集合 迭代器 增強for 泛型 教學目標 [ ] 能夠說出集合與數組的區別 [ ] 說出Collection集合的常用功能 [ ]...
閱讀 1181·2023-04-26 02:42
閱讀 1633·2021-11-12 10:36
閱讀 1780·2021-10-25 09:47
閱讀 1262·2021-08-18 10:22
閱讀 1801·2019-08-30 15:52
閱讀 1213·2019-08-30 10:54
閱讀 2635·2019-08-29 18:46
閱讀 3495·2019-08-26 18:27