摘要:集合的元素個(gè)數(shù)為輸出集合的元素個(gè)數(shù)為在本代碼中,新建一個(gè)局部變量保存的成員方法返回的值,輸出得到因?yàn)橹挥幸粋€(gè)元素。注若遍歷集合的同時(shí)改變集合,將引發(fā)異常。
????在概述里面也說過:Collection是java集合兩大接口之一,旗下有三大子接口:Set(元素不能重復(fù),且無序)、Queue、List(元素可重復(fù),且有序)。
????Collection來源于java.util包,主要方法包括:
主要方法 | 作用 | |
boolean add(Object o) | 將傳入的Object對(duì)象添加到容器中,添加后方法返回true | |
boolean addAll(Collection c) | 將傳入的集合c中的所有對(duì)象添加到容器中,添加后方法返回true | |
void clear() | 清空集合,集合長(zhǎng)度變?yōu)? | |
boolean contains(Object o) | 檢查集合是否存在對(duì)象o,若存在返回true | |
boolean containsAll(Collection c) | 檢查集合是否存在集合c的所有對(duì)象,若存在返回true | |
boolean isEmpty() | 返回集合的size是否為0 | |
Iterator iterator() | 返回Iterator對(duì)象 | |
boolean remove(Object o) | 刪除集合中第一個(gè)符合條件的元素,若集合存在對(duì)象o,刪除并返回true | |
boolean removeAll(Collection c) | 刪除集合中所有與集合c重合的元素,若刪除后對(duì)象進(jìn)行了改變返回true | |
boolean retainAll(Collection c) | 刪除集合中所有與集合c不重合的元素,若刪除后對(duì)象進(jìn)行了改變返回true | |
int size() | 返回集合元素的個(gè)數(shù) | |
Object[] toArray() | 把集合轉(zhuǎn)變成數(shù)組,集合的元素變成對(duì)應(yīng)的數(shù)組元素 |
????下面是Collection的實(shí)例化以及各成員方法的使用方法
實(shí)例化
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為空
????因?yàn)閏5在此之前并沒有添加任何元素,所以為空。
Iterator iterator();
Iterator it5=c5.iterator(); while(it5.hasNext()) { System.out.println("集合5元素:"+it5.next()); }
輸出:集合5元素:5
????注:每個(gè)Iterator對(duì)象只能使用一次, 復(fù)用會(huì)導(dǎo)致java.util.ConcurrentModificationException。
????在本代碼中,新建了一個(gè)局部變量it5保存c5的迭代器,再通過迭代器的成員方法hasNext判斷是否存在下一元素,若true,輸出此元素。
????java8為Collection的遍歷新增了一個(gè)來源于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被添加了一個(gè)元素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只有一個(gè)元素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中,所以第一個(gè)輸出語句必定為true。但是在第一個(gè)語句后c4添加了一個(gè)新的元素3,所以第二個(gè)輸出語句為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首先添加了一個(gè)新元素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),可以理解為移除掉兩個(gè)集合的交集,所以迭代輸出沒有結(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
????注:因?yàn)樵诜椒?中集合5已經(jīng)變成空集合,所以在此方法中將5添加到集合5中以做演示。
????在本方法中,c5添加了一個(gè)元素5,然后調(diào)用c4的成員方法retainAll刪除掉不屬于c5的所有元素,迭代輸出5。
int size();
int size=c4.size(); System.out.println("集合4的元素個(gè)數(shù)為:"+size);
輸出:集合4的元素個(gè)數(shù)為:1
????在本代碼中,新建一個(gè)局部變量size保存c4的成員方法size返回的值,輸出得到1(因?yàn)閏4只有一個(gè)元素5)。
Object[] toArray();
System.out.println(c4.toArray());
輸出:[Ljava.lang.Object;@71e7a66b
????作為對(duì)比,我嘗試調(diào)用父類Object的String toString()方法,結(jié)果得到了[5],與直接輸出對(duì)象的結(jié)果是一致的。
????注:若遍歷集合的同時(shí)改變集合,將引發(fā)ConcurrentModificationException異常。
????Collection接口就寫到這里了,看起來簡(jiǎn)單,但是某些成員方法需要查看源碼才知道如何去用,基本上寫完這篇博文,我對(duì)Collection已經(jīng)有了比較深入的了解,忽然覺得寫作跟編程是相輔相成的。
????一點(diǎn)題外話:這是我第一次系統(tǒng)地寫博文,懂得了一個(gè)道理:世界上沒有簡(jiǎn)單的事。寫的不好請(qǐng)多多見諒。之后要狠狠提高一下我的寫作水平,之前寫公眾號(hào)的文筆都不知道丟在哪里了。
????如果你還想了解關(guān)于java集合的內(nèi)容,歡迎點(diǎn)擊https://segmentfault.com/a/11...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74419.html
摘要:主要用于遍歷集合中的元素,對(duì)象也被稱為迭代器。使用迭代過程中,不可修改集合元素迭代器采用快速失敗機(jī)制。一旦迭代過程中檢測(cè)到該集合已經(jīng)被修改,程序立即出發(fā)異常,而不是顯示修改后的結(jié)果,避免了共享資源而引發(fā)的潛在問題。 集合類和數(shù)組不一樣,數(shù)組元素既可以是基本類型的值,也可以是對(duì)象(實(shí)際上保存的是對(duì)象的引用變量);而集合里只能保存對(duì)象(實(shí)際上只是保存對(duì)象的引用變量,但通常習(xí)慣上認(rèn)為集...
摘要:如果需要?jiǎng)?chuàng)建對(duì)象,則必須與一個(gè)被迭代的集合。這是一個(gè)有狀態(tài)的方法該方法用于保證對(duì)該流的后續(xù)訪問中最大允許訪問的元素個(gè)數(shù)。可以對(duì)集合元素進(jìn)行整體的聚集操作。 Java集合分為Set(無序、不可重復(fù))、List(有序、重復(fù))、Queue(隊(duì)列)和Map(映射關(guān)系) Java集合概述 數(shù)組元素既可以是基本類型的值,也可以是對(duì)象(實(shí)際保存對(duì)象的引用變量)集合只能保存對(duì)象(實(shí)際保存對(duì)象的引用變量...
集合接口 核心集合接口封裝了不同類型的集合,如下圖所示,這些接口允許獨(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)...
摘要:集合類主要負(fù)責(zé)保存盛裝其他數(shù)據(jù),因此集合類也被稱為容器類。所有的集合類都位于包下。表示一組對(duì)象,這些對(duì)象也稱為的元素。成員方法把集合轉(zhuǎn)成數(shù)組迭代器,集合的專用遍歷方式之接口概述有序的,也稱為序列。 前言 在編程中,常常需要集中存放多個(gè)數(shù)據(jù)。從傳統(tǒng)意義上講,數(shù)組是我們的一個(gè)很好的選擇,前提是我們實(shí)現(xiàn)已經(jīng)明確知道我們將要保存的對(duì)象的數(shù)量。 一旦在數(shù)組初始化時(shí)指定了數(shù)組長(zhǎng)度,這個(gè)數(shù)組長(zhǎng)度就...
摘要:集合框架的基本接口類層次結(jié)構(gòu)其中表示接口,表示實(shí)現(xiàn)類和在實(shí)際開發(fā)中,需要將使用的對(duì)象存儲(chǔ)于特定數(shù)據(jù)結(jié)構(gòu)的容器中。實(shí)例是迭代器,擁有兩個(gè)方法方法迭代器用于遍歷集合元素。返回值則是轉(zhuǎn)換后的數(shù)組,該數(shù)組會(huì)保存集合中的所有元素。 Java Collections Framework是Java提供的對(duì)集合進(jìn)行定義,操作,和管理的包含一組接口,類的體系結(jié)構(gòu)。 Java集合框架的基本接口/類層次結(jié)構(gòu)...
摘要:接口也是集合中的一員,但它與接口有所不同,接口與接口主要用于存儲(chǔ)元素,而主要用于迭代訪問即遍歷中的元素,因此對(duì)象也被稱為迭代器。迭代器的實(shí)現(xiàn)原理我們?cè)谥鞍咐呀?jīng)完成了遍歷集合的整個(gè)過程。 【Collection、泛型】 主要內(nèi)容 Collection集合 迭代器 增強(qiáng)for 泛型 教學(xué)目標(biāo) [ ] 能夠說出集合與數(shù)組的區(qū)別 [ ] 說出Collection集合的常用功能 [ ]...
閱讀 1199·2023-04-26 02:42
閱讀 1641·2021-11-12 10:36
閱讀 1804·2021-10-25 09:47
閱讀 1273·2021-08-18 10:22
閱讀 1814·2019-08-30 15:52
閱讀 1224·2019-08-30 10:54
閱讀 2642·2019-08-29 18:46
閱讀 3504·2019-08-26 18:27