Java Collection集合的三種遍歷方式詳解
Collection遍歷方式
Collection集合遍歷的方式有三種:
迭代器foreach/增強(qiáng)for循環(huán)lambda表達(dá)式
迭代器遍歷
迭代器概述:
遍歷就是一個一個的把容器中的元素訪問一遍。
迭代器在Java中是Iterator代表的,迭代器是集合的專用遍歷方式。
Collection集合獲取迭代器的方:
| 方法名稱 | 說明 |
|---|---|
| iterator() | 返回集合中的迭代器對象,該迭代器對象默認(rèn)指向當(dāng)前集合的0索引 |
// 創(chuàng)建迭代器對象 Iterator ite = list.iterator();
Iterator中的常用方法:
| 方法名稱 | 說明 |
|---|---|
| hasNext() | 詢問當(dāng)前位置是否有元素存在,存在返回true ,不存在返回false |
| next() | 獲取當(dāng)前位置的元素,并同時將迭代器對象移向下一個位置,注意防止取出越界。 |
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)建迭代器對象
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()); // 注意不要越界, 越界則報錯
}hasNext方法會判斷當(dāng)前位置是否有元素, 我們可以使用hasNext方法作為While循環(huán)的條件, 實現(xià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");
// 創(chuàng)建迭代器對象
Iterator ite = list.iterator();
// hasNext作為條件
while (ite.hasNext()) {
System.out.println(ite.next());
}
}小結(jié):
迭代器的默認(rèn)位置在哪里。
Iterator<E> iterator():得到迭代器對象,默認(rèn)指向當(dāng)前集合的索引0的位置
迭代器如果取元素越界會出現(xiàn)什么問題。
會出現(xiàn)NoSuchElementException異常。
foreach遍歷
foreach循環(huán)也稱增強(qiáng)for循環(huán):
既可以遍歷集合也可以遍歷數(shù)組
它是JDK5之后出現(xiàn)的, 其內(nèi)部原理是一個Iterator迭代器, 遍歷集合時, 相當(dāng)于是迭代器的簡化寫法
實現(xiàn)Iterable接口的類才可以使用迭代器和增強(qiáng)for, Collection接口已經(jīng)實現(xiàn)了Iterable接口
for(元素數(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的值不會影響數(shù)組的值, 該操作無意義
}
}小結(jié): 增強(qiáng)for可以遍歷哪些容器?
既可以遍歷集合也可以遍歷數(shù)組。
Lambda遍歷
Lambda表達(dá)式遍歷集合:
得益于JDK 8開始的新技術(shù)Lambda表達(dá)式,提供了一種更簡單、更直接的遍歷集合的方式。
Collection結(jié)合Lambda遍歷的API:
| 方法名稱 | 說明 |
|---|---|
| forEach(Consumer<? super T> action): | 結(jié)合lambda遍歷集合 |
通過foreach方法遍歷集合, foreach方法要求傳入一個Consumer接口類型的變量, 且該接口是一個函數(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Java中對域和靜態(tài)方法的訪問不具有多態(tài)性(實例講解)
下面小編就為大家?guī)硪黄贘ava中對域和靜態(tài)方法的訪問不具有多態(tài)性(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
使用MyBatis查詢千萬級數(shù)據(jù)量操作實現(xiàn)
這篇文章主要為大家介紹了如何使用MyBatis?查詢千萬數(shù)據(jù)量的操作過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
Java開發(fā)環(huán)境jdk 1.8安裝配置方法(Win7 64位系統(tǒng)/windows server 2008)
這篇文章主要介紹了Java開發(fā)環(huán)境配置方法(Win7 64位系統(tǒng)/windows server 2008),需要的朋友可以參考下2016-10-10
Java使用正則表達(dá)式驗證手機(jī)號和電話號碼的方法
今天小編就為大家分享一篇關(guān)于Java使用正則表達(dá)式驗證手機(jī)號和電話號碼的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
Java那點事——StringBuffer與StringBuilder原理與區(qū)別
本文給大家分享StringBuffer與StringBuilder的區(qū)別,它們的應(yīng)用場景是什么?非常不錯,面試考官經(jīng)常考的一個問題,有需要的朋友跟著腳本之家小編一起學(xué)習(xí)吧2016-06-06
IntelliJ IDEA 2021 Tomcat 8啟動亂碼問題的解決步驟
很多朋友遇到過IntelliJ IDEA 2021 Tomcat 8啟動的時候出現(xiàn)各種奇葩問題,最近有童鞋反映IntelliJ IDEA 2021 Tomcat 8啟動亂碼,正好我也遇到這個問題,下面我把解決方法分享給大家需要的朋友參考下吧2021-06-06

