Java Collection集合的三種遍歷方式詳解
Collection遍歷方式
Collection集合遍歷的方式有三種:
迭代器foreach/增強(qiáng)for循環(huán)lambda表達(dá)式
迭代器遍歷
迭代器概述:
遍歷就是一個(gè)一個(gè)的把容器中的元素訪問一遍。
迭代器在Java中是Iterator代表的,迭代器是集合的專用遍歷方式。
Collection集合獲取迭代器的方:
方法名稱 | 說明 |
---|---|
iterator() | 返回集合中的迭代器對(duì)象,該迭代器對(duì)象默認(rèn)指向當(dāng)前集合的0索引 |
// 創(chuàng)建迭代器對(duì)象 Iterator ite = list.iterator();
Iterator中的常用方法:
方法名稱 | 說明 |
---|---|
hasNext() | 詢問當(dāng)前位置是否有元素存在,存在返回true ,不存在返回false |
next() | 獲取當(dāng)前位置的元素,并同時(shí)將迭代器對(duì)象移向下一個(gè)位置,注意防止取出越界。 |
next方法獲取元素
public static void main(String[] args) { // 創(chuàng)建String類型的集合 Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); // 創(chuàng)建迭代器對(duì)象 Iterator ite = list.iterator(); // 通過next取出元素 System.out.println(ite.next()); // aaa System.out.println(ite.next()); // bbb System.out.println(ite.next()); // aaa // System.out.println(ite.next()); // 注意不要越界, 越界則報(bào)錯(cuò) }
hasNext方法會(huì)判斷當(dāng)前位置是否有元素, 我們可以使用hasNext方法作為While循環(huán)的條件, 實(shí)現(xiàn)自動(dòng)遍歷元素
public static void main(String[] args) { // 創(chuàng)建String類型的集合 Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); // 創(chuàng)建迭代器對(duì)象 Iterator ite = list.iterator(); // hasNext作為條件 while (ite.hasNext()) { System.out.println(ite.next()); } }
小結(jié):
迭代器的默認(rèn)位置在哪里。
Iterator<E> iterator():得到迭代器對(duì)象,默認(rèn)指向當(dāng)前集合的索引0的位置
迭代器如果取元素越界會(huì)出現(xiàn)什么問題。
會(huì)出現(xiàn)NoSuchElementException異常。
foreach遍歷
foreach循環(huán)也稱增強(qiáng)for循環(huán):
既可以遍歷集合也可以遍歷數(shù)組
它是JDK5之后出現(xiàn)的, 其內(nèi)部原理是一個(gè)Iterator迭代器, 遍歷集合時(shí), 相當(dāng)于是迭代器的簡(jiǎn)化寫法
實(shí)現(xiàn)Iterable接口的類才可以使用迭代器和增強(qiáng)for, Collection接口已經(jīng)實(shí)現(xiàn)了Iterable接口
for(元素?cái)?shù)據(jù)類型 變量名 : 數(shù)組或者Collection集合) { //在此處使用定義的變量即可,該變量就是元素 }
演示代碼:
public static void main(String[] args) { // 創(chuàng)建String類型的集合 Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); // 創(chuàng)建int類型的數(shù)組 int[] arr = {10, 20, 80, 40}; // foreach遍歷集合 for (String item : list) { System.out.println(item); } // foreach遍歷數(shù)組 for (int item : arr) { System.out.println(item); // item = 100; // 注意此處修改變量item的值不會(huì)影響數(shù)組的值, 該操作無意義 } }
小結(jié): 增強(qiáng)for可以遍歷哪些容器?
既可以遍歷集合也可以遍歷數(shù)組。
Lambda遍歷
Lambda表達(dá)式遍歷集合:
得益于JDK 8開始的新技術(shù)Lambda表達(dá)式,提供了一種更簡(jiǎn)單、更直接的遍歷集合的方式。
Collection結(jié)合Lambda遍歷的API:
方法名稱 | 說明 |
---|---|
forEach(Consumer<? super T> action): | 結(jié)合lambda遍歷集合 |
通過foreach方法遍歷集合, foreach方法要求傳入一個(gè)Consumer接口類型的變量, 且該接口是一個(gè)函數(shù)式接口
演示代碼:
通過foreach方法遍歷
public static void main(String[] args) { // 創(chuàng)建String類型的集合 Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); // 通過foreach方法遍歷 list.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); }
通過foreach方法結(jié)合Lambda表達(dá)式進(jìn)行遍歷
public static void main(String[] args) { // 創(chuàng)建String類型的集合 Collection<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("aaa"); // foreach方法結(jié)合Lambda表達(dá)式 list.forEach(s -> System.out.println(s)); }
到此這篇關(guān)于Java Collection集合的三種遍歷方式的文章就介紹到這了,更多相關(guān)Java Collection集合遍歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot中spring-boot-starter-quartz的使用及說明
這篇文章主要介紹了Springboot中spring-boot-starter-quartz的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12java實(shí)現(xiàn)簡(jiǎn)單的圖書借閱系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的圖書借閱系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03java使用poi讀取ppt文件和poi讀取excel、word示例
這篇文章主要介紹了java使用poi讀取ppt文件和poi讀取excel、word示例,需要的朋友可以參考下2014-03-03SpringBoot結(jié)合ProGuard實(shí)現(xiàn)代碼混淆(最新版)
這篇文章主要介紹了SpringBoot結(jié)合ProGuard實(shí)現(xiàn)代碼混淆(最新版),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Elasticsearch?Recovery索引分片分配詳解
這篇文章主要為大家介紹了關(guān)于Elasticsearch的Recovery索引分片分配詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-04-04使用SpringSecurity設(shè)置角色和權(quán)限的注意點(diǎn)
這篇文章主要介紹了使用SpringSecurity設(shè)置角色和權(quán)限的注意點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03