Java Collection集合的三種遍歷方式詳解
Collection遍歷方式
Collection集合遍歷的方式有三種:
迭代器foreach/增強(qiáng)for循環(huán)lambda表達(dá)式
迭代器遍歷
迭代器概述:
遍歷就是一個(gè)一個(gè)的把容器中的元素訪問(wèn)一遍。
迭代器在Java中是Iterator代表的,迭代器是集合的專(zhuān)用遍歷方式。
Collection集合獲取迭代器的方:
| 方法名稱 | 說(shuō)明 |
|---|---|
| iterator() | 返回集合中的迭代器對(duì)象,該迭代器對(duì)象默認(rèn)指向當(dāng)前集合的0索引 |
// 創(chuàng)建迭代器對(duì)象 Iterator ite = list.iterator();
Iterator中的常用方法:
| 方法名稱 | 說(shuō)明 |
|---|---|
| hasNext() | 詢問(wèn)當(dāng)前位置是否有元素存在,存在返回true ,不存在返回false |
| next() | 獲取當(dāng)前位置的元素,并同時(shí)將迭代器對(duì)象移向下一個(gè)位置,注意防止取出越界。 |
next方法獲取元素
public static void main(String[] args) {
// 創(chuàng)建String類(lèi)型的集合
Collection<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("aaa");
// 創(chuàng)建迭代器對(duì)象
Iterator ite = list.iterator();
// 通過(guò)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類(lèi)型的集合
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)什么問(wè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)化寫(xiě)法
實(shí)現(xiàn)Iterable接口的類(lèi)才可以使用迭代器和增強(qiáng)for, Collection接口已經(jīng)實(shí)現(xiàn)了Iterable接口
for(元素?cái)?shù)據(jù)類(lèi)型 變量名 : 數(shù)組或者Collection集合) {
//在此處使用定義的變量即可,該變量就是元素
}演示代碼:
public static void main(String[] args) {
// 創(chuàng)建String類(lèi)型的集合
Collection<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("aaa");
// 創(chuàng)建int類(lèi)型的數(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ù)組的值, 該操作無(wú)意義
}
}小結(jié): 增強(qiáng)for可以遍歷哪些容器?
既可以遍歷集合也可以遍歷數(shù)組。
Lambda遍歷
Lambda表達(dá)式遍歷集合:
得益于JDK 8開(kāi)始的新技術(shù)Lambda表達(dá)式,提供了一種更簡(jiǎn)單、更直接的遍歷集合的方式。
Collection結(jié)合Lambda遍歷的API:
| 方法名稱 | 說(shuō)明 |
|---|---|
| forEach(Consumer<? super T> action): | 結(jié)合lambda遍歷集合 |
通過(guò)foreach方法遍歷集合, foreach方法要求傳入一個(gè)Consumer接口類(lèi)型的變量, 且該接口是一個(gè)函數(shù)式接口
演示代碼:
通過(guò)foreach方法遍歷
public static void main(String[] args) {
// 創(chuàng)建String類(lèi)型的集合
Collection<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("aaa");
// 通過(guò)foreach方法遍歷
list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
}通過(guò)foreach方法結(jié)合Lambda表達(dá)式進(jìn)行遍歷
public static void main(String[] args) {
// 創(chuàng)建String類(lèi)型的集合
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)文章
基于Java中對(duì)域和靜態(tài)方法的訪問(wèn)不具有多態(tài)性(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇基于Java中對(duì)域和靜態(tài)方法的訪問(wèn)不具有多態(tài)性(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
使用MyBatis查詢千萬(wàn)級(jí)數(shù)據(jù)量操作實(shí)現(xiàn)
這篇文章主要為大家介紹了如何使用MyBatis?查詢千萬(wàn)數(shù)據(jù)量的操作過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
Java開(kāi)發(fā)環(huán)境jdk 1.8安裝配置方法(Win7 64位系統(tǒng)/windows server 2008)
這篇文章主要介紹了Java開(kāi)發(fā)環(huán)境配置方法(Win7 64位系統(tǒng)/windows server 2008),需要的朋友可以參考下2016-10-10
Java使用正則表達(dá)式驗(yàn)證手機(jī)號(hào)和電話號(hào)碼的方法
今天小編就為大家分享一篇關(guān)于Java使用正則表達(dá)式驗(yàn)證手機(jī)號(hào)和電話號(hào)碼的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
Java那點(diǎn)事——StringBuffer與StringBuilder原理與區(qū)別
本文給大家分享StringBuffer與StringBuilder的區(qū)別,它們的應(yīng)用場(chǎng)景是什么?非常不錯(cuò),面試考官經(jīng)??嫉囊粋€(gè)問(wèn)題,有需要的朋友跟著腳本之家小編一起學(xué)習(xí)吧2016-06-06
MyBatisPlus中事務(wù)處理的實(shí)現(xiàn)
本文主要介紹了MyBatisPlus中事務(wù)處理的實(shí)現(xiàn),包括事務(wù)的開(kāi)啟、提交、回滾等操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
Java+Swing實(shí)現(xiàn)中國(guó)象棋游戲
這篇文章將通過(guò)Java+Swing實(shí)現(xiàn)經(jīng)典的中國(guó)象棋游戲。文中可以實(shí)現(xiàn)開(kāi)始游戲,悔棋,退出等功能。感興趣的小伙伴可以跟隨小編一起動(dòng)手試一試2022-02-02
IntelliJ IDEA 2021 Tomcat 8啟動(dòng)亂碼問(wèn)題的解決步驟
很多朋友遇到過(guò)IntelliJ IDEA 2021 Tomcat 8啟動(dòng)的時(shí)候出現(xiàn)各種奇葩問(wèn)題,最近有童鞋反映IntelliJ IDEA 2021 Tomcat 8啟動(dòng)亂碼,正好我也遇到這個(gè)問(wèn)題,下面我把解決方法分享給大家需要的朋友參考下吧2021-06-06

