Java單列集合Collection常用方法示例詳解
引言
在上篇文章中,我們簡單介紹了下Java集合家族中的成員,那么本篇文章,我們就來看看Java在單列集合中,為我們提供的一些方法,以及單列集合的常用遍歷玩法,一起來進(jìn)入學(xué)習(xí)吧。
在Java基礎(chǔ)中我們也學(xué)過,在類實(shí)現(xiàn)接口后,該類就會(huì)將接口中的抽象方法繼承過來,此時(shí)該類需要重寫該抽象方法,完成具體的邏輯。
一、Collection常用功能
Collection是所有單列集合的父接口,因此在Collection中定義了單列集合(List和Set)通用的一些方法,這些方法可用于操作所有的單列集合。
1.1方法如下:
打開api文檔,我們可以看到Collection在java.util下,我們通過練習(xí)來演示下這些方法的使用:
1.2方法演示
public class Demo1Collection { public static void main(String[] args) { //創(chuàng)建集合對(duì)象 //使用多態(tài)的形式 定義 Collection<String> person = new ArrayList<>(); //輸出不是一個(gè)對(duì)象地址,所以說重寫了toString 方法 System.out.println(person); // boolean add(Object o) 向集合中添加一個(gè)元素 // 返回值是一個(gè)boolean值,一般可以不用接收 person.add("科比"); person.add("姚明"); person.add("庫里"); person.add("麥迪"); //添加完我們?cè)谳敵鲆幌逻@個(gè)集合 System.out.println(person); // boolean remove(Object o) 刪除該集合中指定的元素 // 返回 集合中存在元素,刪除元素,返回true;集合中不存在,刪除返回false boolean res1 = person.remove("科比"); boolean res2 = person.remove("奧尼爾"); System.out.println("res1=" +res1); System.out.println("res2=" +res2); // boolean isEmpty() 判斷該集合是否為空 boolean empty = person.isEmpty(); System.out.println("empty=" + empty); // boolean contains(Object o) 判斷該集合中是否包含某個(gè)元素 boolean contains = person.contains("麥迪"); System.out.println("contains=" + contains); // int size() 獲取該集合元素個(gè)數(shù) int size = person.size(); System.out.println("size = " + size); // public Object[] toArray() 把集合總的元素,存儲(chǔ)到數(shù)組中 Object[] personArray = person.toArray(); for (int i = 0; i < personArray.length; i++) { System.out.println("數(shù)組--" + personArray[i]); } // void clear() 刪除該集合中的所有元素,但是集合還存在 person.clear(); System.out.println(person); //通過多態(tài)的方式,如果我們把a(bǔ)rrayList 換成HashSet,發(fā)現(xiàn)也能使用,這就是我們實(shí)現(xiàn)接口的好處 } }
注意:有關(guān)Collection中的方法不止上面這些,其他方法可以自行查看API學(xué)習(xí)。
二、查詢集合中的元素-Iterator迭代器
2.1 Iterator接口
在程序開發(fā)中,經(jīng)常需要遍歷集合中的所有元素,就是要看看里面所有的元素,那我們?cè)趺崔k呢?
針對(duì)這種需求,JDK專門提供了一個(gè)接口: java.util.Iterator。該接口也是Java集合中的一員,但它與Collection、Map接口有所不同,Collection接口與Map接口主要用于存儲(chǔ)元素,而Iterator主要用于迭代訪問(即遍歷)Collection中的元素,因?yàn)镮terator對(duì)象也被稱為迭代器。
迭代器的概念
迭代即Collection集合元素的通用獲取方式。在取元素之前先要判斷集合中有沒有元素,如果有,就把這個(gè)元素取出來,繼續(xù)再判斷,如果還有就再取出來。一直把集合中的所有元素全部取出。這種方式專業(yè)術(shù)語稱為迭代。
通過文檔,我們可以看到Iterator是一個(gè)接口,我們無法直接使用,而需要使用Iterator接口的實(shí)現(xiàn)類對(duì)象,通過Collection接口中的Iterator()方法,就可以返回迭代器的實(shí)現(xiàn)類對(duì)象:public Iterator iterator():獲取結(jié)合對(duì)應(yīng)的迭代器,用來遍歷集合中的元素。通過API文檔,我們可以看到Collection中 Itrerator接口的常用方法如下:
public E next()返回迭代的下一個(gè)元素
public boolean hasNext()如果仍有元素可以迭代,則返回true。
接下來我們通過案例學(xué)習(xí),如何使用Iterator迭代集合中的元素:
/** * Iterator 迭代器使用 */ public class Demo1Iterator { public static void main(String[] args) { /** * 使用步驟: * 1. 使用集合中的方法 iterator() 獲取迭代器的實(shí)現(xiàn)類對(duì)象,使用Iterator接口接收 (使用接口接收返回值,這就是我們說的多態(tài)) * 2. 使用Iterator接口中的方法 hashNext() 判斷有沒有下一個(gè)元素 * 3. 使用Iterator接口中的方法 next() 取出集合中的下一個(gè)元素 * */ Collection<String> ball = new ArrayList<>(); ball.add("籃球"); ball.add("足球"); ball.add("排球"); ball.add("乒乓球"); //我們來獲取一個(gè)迭代器,多態(tài) Iterator<String> iterator = ball.iterator(); //判斷 boolean b = iterator.hasNext(); System.out.println("是否有元素--" + b); //取出 String next = iterator.next(); System.out.println("元素--" + next); //判斷 boolean b1 = iterator.hasNext(); System.out.println("是否有元素--" + b1); //取出 String next1 = iterator.next(); System.out.println("元素--" + next1); //判斷 boolean b2 = iterator.hasNext(); System.out.println("是否有元素--" + b2); //取出 String next2 = iterator.next(); System.out.println("元素--" + next2); //判斷 boolean b3 = iterator.hasNext(); System.out.println("是否有元素--" + b3); //取出 String next3 = iterator.next(); System.out.println("元素--" + next3); //判斷 boolean b4 = iterator.hasNext(); System.out.println("是否有元素--" + b4); //取出 // String next4 = iterator.next(); // System.out.println("元素--" + next4); //如果沒有元素,在取的話,會(huì)報(bào)一個(gè)NoSuchElementException 的錯(cuò)誤 /** * * 代碼優(yōu)化 上面這些步驟是一個(gè)重復(fù)的過程,我們可以使用循環(huán)來優(yōu)化,那我們選擇哪種來呢 * 我們說 知道元素個(gè)數(shù),使用for * 不知道元素個(gè)數(shù),使用while * * 那當(dāng)前我們迭代器的個(gè)數(shù),我們不知道,所以使用while循環(huán),而我們的hasNext 就可以作為 * while的條件來判斷 * */ while (iterator.hasNext()) { String ballResult = iterator.next(); System.out.println("--優(yōu)化--" + ballResult); } } }
分析:在進(jìn)行集合元素取出時(shí),如果集合中已經(jīng)沒有元素了,還繼續(xù)使用迭代器的next方法,將會(huì)發(fā)生java.util.NoSuchElementException沒有集合元素的錯(cuò)誤。
2.2迭代器的實(shí)現(xiàn)原理
我們?cè)谥暗陌咐幸呀?jīng)完成了Iterator遍歷集合的整個(gè)過程。當(dāng)遍歷集合時(shí),首先通過調(diào)用集合的iterator()方法獲得迭代器對(duì)象,然后使用hasNext()方法判斷集合中是否存在下一個(gè)元素,如果存在,則調(diào)用next()方法將元素取出,否則說明已經(jīng)到達(dá)集合末尾,停止遍歷元素。
Itearator迭代器對(duì)象在遍歷集合時(shí),內(nèi)部采用指針的方式來跟蹤集合中的元素,為了讓初學(xué)者能更好的理解迭代器的工作原理,接下來通過一個(gè)圖例來演示Iterator對(duì)象迭代元素的過程:
在獲取迭代器的實(shí)現(xiàn)類對(duì)象是,會(huì)把索引指向集合的-1位置,也就是在調(diào)用Iterator的next方法之前,迭代器的索引位于第一個(gè)元素之前,不指向任何元素。當(dāng)?shù)谝淮握{(diào)用迭代器的next方法后,迭代器的索引會(huì)向后移動(dòng)一位,指向第一個(gè)元素并將該元素返回,當(dāng)再次調(diào)用next方法時(shí),迭代器的索引會(huì)指向第二個(gè)元素并將該元素返回,以此類推,直到hasNext方法返回false,表示到達(dá)了集合的末尾,終止對(duì)元素的遍歷。
三、查詢集合中的元素-增強(qiáng)for
3.1概念
增強(qiáng)for循環(huán)(也稱為for each循環(huán))是JDK5以后出來的一個(gè)高級(jí)for循環(huán),專門用來遍歷數(shù)組和集合的。 通過api文檔,Collection繼承了一個(gè)Iterable接口,而實(shí)現(xiàn)這個(gè)接口允許對(duì)象成為“foreach”語句目標(biāo),也就是所有的單列集合都可以使用增強(qiáng)for。
它的內(nèi)部原理其實(shí)是個(gè)Iterator迭代器,只是用for循環(huán)的方式來簡化迭代器的寫法,所以在遍歷的過程中,不能對(duì)集合中的元素進(jìn)行增刪改查操作。
格式:
for (元素類型 元素名 : 集合名或數(shù)組) { 訪問元素 }
它用于遍歷Collection和數(shù)組。通常只進(jìn)行遍歷元素,不在遍歷的過程中對(duì)集合元素進(jìn)行增刪操作。
3.2練習(xí)1:遍歷數(shù)組
public class Demo2Foreach { public static void main(String[] args) { int[] array = {1,2,3,4,5}; for (int i : array) { System.out.println("--數(shù)組元素--" + i); if (i == 2) { i = 19; } } //在增強(qiáng)for中修改 元素,并不能賦值 System.out.println(Arrays.toString(array)); } }
3.3練習(xí)2:遍歷集合
public class Demo3Foreach { public static void main(String[] args) { Collection<String> ball = new ArrayList<>(); ball.add("籃球"); ball.add("足球"); ball.add("排球"); for (String s : ball) { System.out.println("---" + s); } //相對(duì)于Iterator遍歷方式,增強(qiáng)for 簡化了很多,所以優(yōu)先使用該方式。 } }
新for循環(huán)必須有被遍歷的目標(biāo)。目標(biāo)只能是Collection或者是數(shù)組。僅僅作為遍歷操作出現(xiàn)。
總結(jié)
本篇中主要介紹了單列集合接口Collection為我們提供的常用接口,也通過代碼的方式帶大家體會(huì)了一下。在后面的內(nèi)容中為大家介紹了如何把單列集合中的內(nèi)容查看出來(遍歷),通過講解一些底層的原理,讓大家感受了一下迭代器的使用。
當(dāng)然集合的遍歷不僅僅限于這兩種方式,例如java8為我們提供的流式遍歷集合,希望大家下去后自己也能搜搜相關(guān)的遍歷方式,嘗試使用一下,ok,本文就到這里了。
以上就是Java單列集合Collection常用方法示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java單列集合Collection的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能示例
這篇文章主要介紹了java使用Hex編碼解碼實(shí)現(xiàn)Aes加密解密功能,結(jié)合完整實(shí)例形式分析了Aes加密解密功能的定義與使用方法,需要的朋友可以參考下2017-01-01Elasticsearch?自動(dòng)重啟腳本創(chuàng)建實(shí)現(xiàn)
這篇文章主要為大家介紹了Elasticsearch?自動(dòng)重啟腳本創(chuàng)建實(shí)現(xiàn)詳解分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08javaWeb使用驗(yàn)證碼實(shí)現(xiàn)簡單登錄
這篇文章主要為大家詳細(xì)介紹了javaWeb使用驗(yàn)證碼實(shí)現(xiàn)簡單登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08java數(shù)據(jù)結(jié)構(gòu)和算法之馬踏棋盤算法
這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)和算法之馬踏棋盤算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02劍指Offer之Java算法習(xí)題精講數(shù)組與二叉樹
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03SpringBoot整合EasyExcel實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出
這篇文章主要介紹了SpringBoot整合EasyExcel實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出的方法,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot,感興趣的朋友可以了解下2021-05-05Java 垃圾回收機(jī)制詳解(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
在系統(tǒng)運(yùn)行過程中,會(huì)產(chǎn)生一些無用的對(duì)象,這些對(duì)象占據(jù)著一定的內(nèi)存,如果不對(duì)這些對(duì)象清理回收無用對(duì)象的內(nèi)存,可能會(huì)導(dǎo)致內(nèi)存的耗盡,所以垃圾回收機(jī)制回收的是內(nèi)存。下面通過本文給大家詳細(xì)介紹java垃圾回收機(jī)制,一起學(xué)習(xí)吧2017-02-02