摘要:集合的元素個數(shù)為輸出集合的元素個數(shù)為在本代碼中,新建一個局部變量保存的成員方法返回的值,輸出得到因為只有一個元素。注若遍歷集合的同時改變集合,將引發(fā)異常。
????在概述里面也說過:Collection是java集合兩大接口之一,旗下有三大子接口:Set(元素不能重復,且無序)、Queue、List(元素可重復,且有序)。
????Collection來源于java.util包,主要方法包括:
主要方法 | 作用 | |
boolean add(Object o) | 將傳入的Object對象添加到容器中,添加后方法返回true | |
boolean addAll(Collection c) | 將傳入的集合c中的所有對象添加到容器中,添加后方法返回true | |
void clear() | 清空集合,集合長度變?yōu)? | |
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() | 返回集合元素的個數(shù) | |
Object[] toArray() | 把集合轉(zhuǎn)變成數(shù)組,集合的元素變成對應的數(shù)組元素 |
????下面是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,所以經(jīng)過迭代器輸出只能得到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被清空,所以迭代輸出并沒有結(jié)果。
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。然后調(diào)用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),可以理解為移除掉兩個集合的交集,所以迭代輸出沒有結(jié)果。
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已經(jīng)變成空集合,所以在此方法中將5添加到集合5中以做演示。
????在本方法中,c5添加了一個元素5,然后調(diào)用c4的成員方法retainAll刪除掉不屬于c5的所有元素,迭代輸出5。
int size();
int size=c4.size(); System.out.println("集合4的元素個數(shù)為:"+size);
輸出:集合4的元素個數(shù)為:1
????在本代碼中,新建一個局部變量size保存c4的成員方法size返回的值,輸出得到1(因為c4只有一個元素5)。
Object[] toArray();
System.out.println(c4.toArray());
輸出:[Ljava.lang.Object;@71e7a66b
????作為對比,我嘗試調(diào)用父類Object的String toString()方法,結(jié)果得到了[5],與直接輸出對象的結(jié)果是一致的。
????注:若遍歷集合的同時改變集合,將引發(fā)ConcurrentModificationException異常。
????Collection接口就寫到這里了,看起來簡單,但是某些成員方法需要查看源碼才知道如何去用,基本上寫完這篇博文,我對Collection已經(jīng)有了比較深入的了解,忽然覺得寫作跟編程是相輔相成的。
????一點題外話:這是我第一次系統(tǒng)地寫博文,懂得了一個道理:世界上沒有簡單的事。寫的不好請多多見諒。之后要狠狠提高一下我的寫作水平,之前寫公眾號的文筆都不知道丟在哪里了。
????如果你還想了解關(guān)于java集合的內(nèi)容,歡迎點擊https://segmentfault.com/a/11...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/74419.html
摘要:如果需要創(chuàng)建對象,則必須與一個被迭代的集合。這是一個有狀態(tài)的方法該方法用于保證對該流的后續(xù)訪問中最大允許訪問的元素個數(shù)。可以對集合元素進行整體的聚集操作。 Java集合分為Set(無序、不可重復)、List(有序、重復)、Queue(隊列)和Map(映射關(guān)系) Java集合概述 數(shù)組元素既可以是基本類型的值,也可以是對象(實際保存對象的引用變量)集合只能保存對象(實際保存對象的引用變量...
集合接口 核心集合接口封裝了不同類型的集合,如下圖所示,這些接口允許獨立于其表示的細節(jié)來操縱集合,核心集合接口是Java集合框架的基礎(chǔ),如下圖所示,核心集合接口形成層次結(jié)構(gòu)。 showImg(https://segmentfault.com/img/bVbntJW?w=402&h=146); Set是一種特殊的Collection,SortedSet是一種特殊的Set,依此類推,另請注意,層次結(jié)構(gòu)...
摘要:集合類主要負責保存盛裝其他數(shù)據(jù),因此集合類也被稱為容器類。所有的集合類都位于包下。表示一組對象,這些對象也稱為的元素。成員方法把集合轉(zhuǎn)成數(shù)組迭代器,集合的專用遍歷方式之接口概述有序的,也稱為序列。 前言 在編程中,常常需要集中存放多個數(shù)據(jù)。從傳統(tǒng)意義上講,數(shù)組是我們的一個很好的選擇,前提是我們實現(xiàn)已經(jīng)明確知道我們將要保存的對象的數(shù)量。 一旦在數(shù)組初始化時指定了數(shù)組長度,這個數(shù)組長度就...
摘要:集合框架的基本接口類層次結(jié)構(gòu)其中表示接口,表示實現(xiàn)類和在實際開發(fā)中,需要將使用的對象存儲于特定數(shù)據(jù)結(jié)構(gòu)的容器中。實例是迭代器,擁有兩個方法方法迭代器用于遍歷集合元素。返回值則是轉(zhuǎn)換后的數(shù)組,該數(shù)組會保存集合中的所有元素。 Java Collections Framework是Java提供的對集合進行定義,操作,和管理的包含一組接口,類的體系結(jié)構(gòu)。 Java集合框架的基本接口/類層次結(jié)構(gòu)...
摘要:接口也是集合中的一員,但它與接口有所不同,接口與接口主要用于存儲元素,而主要用于迭代訪問即遍歷中的元素,因此對象也被稱為迭代器。迭代器的實現(xiàn)原理我們在之前案例已經(jīng)完成了遍歷集合的整個過程。 【Collection、泛型】 主要內(nèi)容 Collection集合 迭代器 增強for 泛型 教學目標 [ ] 能夠說出集合與數(shù)組的區(qū)別 [ ] 說出Collection集合的常用功能 [ ]...
閱讀 1193·2023-04-26 02:42
閱讀 1638·2021-11-12 10:36
閱讀 1796·2021-10-25 09:47
閱讀 1270·2021-08-18 10:22
閱讀 1810·2019-08-30 15:52
閱讀 1221·2019-08-30 10:54
閱讀 2641·2019-08-29 18:46
閱讀 3504·2019-08-26 18:27