国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【從零開始學(xué)JAVA | 第二十四篇】單列集合的遍歷

這篇具有很好參考價(jià)值的文章主要介紹了【從零開始學(xué)JAVA | 第二十四篇】單列集合的遍歷。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【從零開始學(xué)JAVA | 第二十四篇】單列集合的遍歷,【從零開始學(xué)習(xí)JAVA】,算法,java,開發(fā)語(yǔ)言,學(xué)習(xí)

目錄

前言:

單列集合的遍歷方式:

迭代器遍歷:

增強(qiáng)for遍歷:

lambda方法遍歷:?

總結(jié):


前言:

本篇我們會(huì)講解關(guān)于單列集合的幾種遍歷方式,遍歷集合可以說(shuō)是對(duì)于集合要求掌握的最低技能,因此我們要熟練的掌握遍歷集合的方式。

在這里我們不講for循環(huán)遍歷,for循環(huán)無(wú)法對(duì)單列集合的set子集合進(jìn)行遍歷,因?yàn)閟et集合的特點(diǎn)就是無(wú)序,無(wú)法用索引進(jìn)行遍歷。

單列集合的遍歷方式:

迭代器遍歷:

在ES6中,為了方便遍歷collection數(shù)據(jù)結(jié)構(gòu),引入了可迭代協(xié)議(Iterable protocol)迭代器協(xié)議(Iterator protocol)。這兩個(gè)協(xié)議一起實(shí)現(xiàn)了遍歷collection的能力。

可迭代協(xié)議指定了collection必須實(shí)現(xiàn)一個(gè)名為[Symbol.iterator]的方法,該方法返回一個(gè)迭代器對(duì)象。而迭代器對(duì)象則定義了一個(gè)next()方法,該方法返回一個(gè)包含value和done屬性的對(duì)象,value表示當(dāng)前的值,done屬性表示當(dāng)前是否遍歷完畢。

JavaScript中有一些內(nèi)置的可迭代對(duì)象,如數(shù)組(Array)、Set、Map、字符串(String)和arguments等。按照可迭代協(xié)議的規(guī)范,這些collection對(duì)象都必須實(shí)現(xiàn)[Symbol.iterator]方法,返回一個(gè)符合迭代器協(xié)議規(guī)范的對(duì)象。

常用的iterator方法:

  1. next():返回一個(gè)包含value和done屬性的對(duì)象,value表示當(dāng)前遍歷的值,done表示遍歷是否已經(jīng)結(jié)束。

  2. return():用來(lái)提前結(jié)束迭代,然后返回一個(gè)包含value和done屬性的對(duì)象,value表示提前結(jié)束時(shí)的返回值,done屬性為true。

  3. throw():用來(lái)主動(dòng)拋出一個(gè)異常,用于在迭代過(guò)程中遇到錯(cuò)誤或異常時(shí)中止遍歷。

案例:

import java.util.Iterator;

public class text05 {
    public static void main(String[] args) {
        String list="abide";
        Iterator<String> it=list.lines().iterator();
        String str=it.next();
        System.out.println(str);
    }
}

在這段Java代碼中,`list` 是一個(gè)字符串變量,調(diào)用了 `lines()` 方法并 `iterator()` 方法將其轉(zhuǎn)換為一個(gè)字符串?dāng)?shù)組對(duì)應(yīng)的迭代器對(duì)象,并將該迭代器對(duì)象賦值給了 `it` 變量。`it.next()` 方法獲取迭代器中的下一個(gè)元素,即字符串?dāng)?shù)組中的第一個(gè)元素,并將其賦值給了 `str` 變量。最后將 `str` 變量的值打印到控制臺(tái)中。

因?yàn)?list 變量中只有一個(gè)字符串 "abide",所以 list.lines()?返回只包含一個(gè)元素的字符串?dāng)?shù)組 ["abide"],且由于是調(diào)用了 iterator()?方法,獲取了對(duì)應(yīng)數(shù)組的迭代器對(duì)象。所以打印的結(jié)果是 "abide"。

除了數(shù)組,其他collection對(duì)象如Set、Map和字符串等也都可以使用迭代器遍歷。

雖然迭代器可以快速指向容器中的元素,但是我們不可以簡(jiǎn)單的認(rèn)為迭代器就是指針。

在 Java 中,迭代器是一種對(duì)象,它允許我們遍歷集合或列表等容器中的元素。迭代器的本質(zhì)是在提供一種通用的方法,以便我們可以訪問(wèn)集合類的內(nèi)部元素,而無(wú)需暴露容器內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。這個(gè)特性使得我們能夠使用同樣的方式遍歷不同類型的容器,同時(shí)保持容器類的封裝性。

迭代器的本質(zhì)包含兩個(gè)方面,一是能夠訪問(wèn)容器內(nèi)部的元素,二是能夠支持前移、后移與刪除等操作。在具體實(shí)現(xiàn)中,迭代器通常會(huì)持有對(duì)容器對(duì)象的引用,并且會(huì)提供 next()、hasNext()、remove() 等方法來(lái)實(shí)現(xiàn)元素的訪問(wèn)與控制操作。此外,Java 迭代器還具有一些重要特性,如快速失敗機(jī)制,支持并發(fā)訪問(wèn)等,以保障程序的正確性和可靠性。

增強(qiáng)for遍歷:

Java 中的增強(qiáng) for 循環(huán)是一種簡(jiǎn)化遍歷數(shù)組或集合的語(yǔ)法。它可以在不顯式定義循環(huán)計(jì)數(shù)器或迭代器的情況下,遍歷循環(huán)中的每個(gè)元素。下面是示例代碼:

int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
? ? System.out.println(number);
}

這段代碼將創(chuàng)建一個(gè)整數(shù)數(shù)組,然后使用增強(qiáng) for 循環(huán)遍歷該數(shù)組。在每個(gè)循環(huán)迭代中,增強(qiáng) for 循環(huán)將從數(shù)組中取出一個(gè)元素,并將其存儲(chǔ)在名為 number?的變量中。

其實(shí)增強(qiáng)for循環(huán)的底層就是迭代器,是我們?yōu)榱撕?jiǎn)化迭代器的代碼書寫而創(chuàng)造出來(lái)的。?

Java 中的增強(qiáng) for 循環(huán)可以用于遍歷任何實(shí)現(xiàn)了 Iterable? 接口的集合對(duì)象。

案例:

List<String> names = new ArrayList<>(Arrays.asList("Alice", "Bob", "Charlie"));
for (String name : names) {
? ? System.out.println(name);
}

這段代碼將創(chuàng)建一個(gè)字符串列表,并使用增強(qiáng) for 循環(huán)遍歷該列表中的每個(gè)元素。

需要注意的是,增強(qiáng) for 循環(huán)僅用于遍歷操作,它并不能用于修改集合中的元素。如果需要在循環(huán)中修改集合中的元素,應(yīng)使用傳統(tǒng)的 `for` 循環(huán)或迭代器進(jìn)行遍歷。

增強(qiáng)for循環(huán)的特點(diǎn):

1. 簡(jiǎn)潔易讀:增強(qiáng) for 循環(huán)可以讓代碼更加簡(jiǎn)潔易讀,特別是在遍歷數(shù)組或集合等容器類型時(shí),可以省略掉繁瑣的索引或迭代器等操作。

2. 安全性:增強(qiáng) for 循環(huán)是一種類型安全的循環(huán),即在編譯時(shí)就能夠檢查類型匹配,從而避免了運(yùn)行時(shí)的類型轉(zhuǎn)換錯(cuò)誤。

3. 效率低下:雖然增強(qiáng) for 循環(huán)簡(jiǎn)潔易讀,但在一些性能要求較高的場(chǎng)景下,它的效率可能會(huì)比傳統(tǒng)的 for 循環(huán)或迭代器遍歷低下。這是因?yàn)樵鰪?qiáng) for 循環(huán)需要在每次循環(huán)迭代中執(zhí)行一次數(shù)組或集合對(duì)象的訪問(wèn)操作,造成了一些額外的性能損失。

總的來(lái)說(shuō),增強(qiáng) for 循環(huán)適用于那些簡(jiǎn)單的遍歷操作,可以提高代碼可讀性和維護(hù)性。但對(duì)于復(fù)雜的遍歷場(chǎng)景,應(yīng)使用傳統(tǒng)的 for 循環(huán)或迭代器來(lái)實(shí)現(xiàn)遍歷。

lambda方法遍歷:?

Lambda 是 Java 8 引入的一個(gè)新特性,它可以簡(jiǎn)化對(duì)匿名類的使用,使得代碼更加簡(jiǎn)潔易讀。Lambda 表達(dá)式可以傳遞為方法參數(shù),類似于傳遞一個(gè)函數(shù)或代碼塊,可以大幅度減少代碼和 API 的復(fù)雜性。下面是一個(gè) Lambda 的示例代碼:

List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
list.forEach((n) -> System.out.println(n));

這段代碼將創(chuàng)建一個(gè)整數(shù)列表,然后使用 forEach?方法遍歷該列表并打印出每個(gè)元素。在這里,我們使用了一個(gè) Lambda 表達(dá)式 (n) -> System.out.println(n)?來(lái)作為 forEach 方法的參數(shù),其中 `(n)` 是 Lambda 表達(dá)式的形參列表,`->` 是 Lambda 運(yùn)算符,而 `System.out.println(n)` 則是 Lambda 表達(dá)式的函數(shù)體。

在這個(gè)例子中,Lambda 表達(dá)式可以理解為一個(gè)簡(jiǎn)單的匿名函數(shù),接受一個(gè)整數(shù)參數(shù) `n` 并將其打印出來(lái)。與傳統(tǒng)的匿名類相比,使用 Lambda 表達(dá)式可以讓代碼更加簡(jiǎn)潔明了,同時(shí)避免了創(chuàng)建額外的匿名類對(duì)象帶來(lái)的性能和內(nèi)存開銷。

除了 forEach 方法,Lambda 表達(dá)式還可以用于任何接受函數(shù)式接口作為參數(shù)的方法,例如:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().mapToInt(n -> n).sum();
System.out.println(sum);

這段代碼使用了 Java 8 的流式 API,將整數(shù)列表轉(zhuǎn)換為流并調(diào)用 `mapToInt` 方法將每個(gè)元素轉(zhuǎn)換為整數(shù)類型并求和。在這里,`(n -> n)` 代表了一個(gè)簡(jiǎn)單的 Lambda 表達(dá)式,接受一個(gè)整數(shù)參數(shù)并返回其本身。

Lambda 表達(dá)式的特點(diǎn):

1. 簡(jiǎn)潔易讀:Lambda 表達(dá)式可以顯著地簡(jiǎn)化匿名類的語(yǔ)法,使得代碼更加簡(jiǎn)潔易讀。

2. 傳遞行為:Lambda 表達(dá)式可以看作是傳遞行為的一種方式,它可以作為方法參數(shù)傳遞,從而提供了一種靈活的、可重用的代碼塊。

3. 高效性:Lambda 表達(dá)式可以提高代碼的效率和性能,尤其是在并發(fā)或集合處理等場(chǎng)景下,可以節(jié)省時(shí)間和內(nèi)存開銷。

4. 類型推導(dǎo):Java 8 引入的類型推導(dǎo)機(jī)制使得 Lambda 表達(dá)式可以在某些情況下省略參數(shù)類型,并減少代碼冗余。

5. 閉包和變量捕獲:Lambda 表達(dá)式可以捕獲代碼塊內(nèi)的變量,從而形成閉包。這使得 Lambda 表達(dá)式可以訪問(wèn)局部變量和對(duì)象字段等狀態(tài),從而實(shí)現(xiàn)更加靈活和功能強(qiáng)大的行為。

總之,Java 中的 Lambda 表達(dá)式是一種便捷、高效、靈活的編程方式,可以在很多場(chǎng)景下實(shí)現(xiàn)代碼重用和靈活組合。它的使用可以提高代碼的可讀性和維護(hù)性,同時(shí)也可以降低代碼的復(fù)雜性和錯(cuò)誤率。

總結(jié):

? ? ? ? 我們必須掌握前兩種對(duì)單列集合的遍歷,最后一個(gè)lambda可以選擇性的掌握,單列集合的遍歷方法還有很多,我們?cè)谶@里只是給大家介紹了幾個(gè)最常用的遍歷方式。

如果我的內(nèi)容對(duì)你有幫助,請(qǐng)點(diǎn)贊,評(píng)論,收藏。創(chuàng)作不易,大家的支持就是我堅(jiān)持下去的動(dòng)力!

【從零開始學(xué)JAVA | 第二十四篇】單列集合的遍歷,【從零開始學(xué)習(xí)JAVA】,算法,java,開發(fā)語(yǔ)言,學(xué)習(xí)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-595132.html

到了這里,關(guān)于【從零開始學(xué)JAVA | 第二十四篇】單列集合的遍歷的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 二十三種設(shè)計(jì)模式第二十四篇--訪問(wèn)者模式(完結(jié)撒花)

    二十三種設(shè)計(jì)模式第二十四篇--訪問(wèn)者模式(完結(jié)撒花)

    在訪問(wèn)者模式(Visitor Pattern)中,我們使用了一個(gè)訪問(wèn)者類,它改變了元素類的執(zhí)行算法。 通過(guò)這種方式,元素的執(zhí)行算法可以隨著訪問(wèn)者改變而改變。 這種類型的設(shè)計(jì)模式屬于行為型模式。根據(jù)模式,元素對(duì)象已接受訪問(wèn)者對(duì)象,這樣訪問(wèn)者對(duì)象就可以處理元素對(duì)象上的

    2024年02月14日
    瀏覽(24)
  • 【從零開始學(xué)習(xí)JAVA | 第二十五篇】泛型

    【從零開始學(xué)習(xí)JAVA | 第二十五篇】泛型

    目錄 前言: 泛型: 額外拓展: 總結(jié): ????????本文將詳細(xì)介紹之前我們?cè)贘AVA 中一直在講的泛型,各位感興趣的同學(xué)可以點(diǎn)擊進(jìn)來(lái)觀看。 ????????泛型是一種編程概念, 它允許在定義類、接口或方法時(shí)使用類型參數(shù),這樣可以在使用時(shí)指定實(shí)際的類型。 通過(guò)使用泛

    2024年02月16日
    瀏覽(25)
  • 【從零開始學(xué)習(xí)JAVA | 第二十二篇】BigInteger

    【從零開始學(xué)習(xí)JAVA | 第二十二篇】BigInteger

    目錄 ?前言: ?BigInterger: BigInteger常見的方法: 總結(jié): ? ? ? ? 本篇我們將介紹BigInteger這個(gè)比較實(shí)用一點(diǎn)的API,這個(gè)API在我們實(shí)際寫項(xiàng)目中都是很實(shí)用的API,因此大家應(yīng)該對(duì)這個(gè)API有更加熟練的掌握。 在Java中,整數(shù)類型int和long的取值范圍是有限的,超出該范圍的整數(shù)無(wú)法

    2024年02月15日
    瀏覽(36)
  • 【從零開始學(xué)習(xí)JAVA | 第二十九篇】Stream流

    【從零開始學(xué)習(xí)JAVA | 第二十九篇】Stream流

    目錄 前言: Stram流: 設(shè)計(jì)目標(biāo): 使用步驟: 1.先得到一條Stream流,并把數(shù)據(jù)放上去。 2.利用Stream流中的各種API進(jìn)行操作。 使用Stream流的注意事項(xiàng): 總結(jié): ? ? ? ? 本文我們將學(xué)習(xí)Stream流,他就像流水線一樣,可以對(duì)我們要處理的對(duì)象進(jìn)行逐步處理,最終達(dá)到我們想要的效果

    2024年02月17日
    瀏覽(34)
  • 【從零開始學(xué)習(xí)JAVA | 第二十七篇】JAVA期末練習(xí)(PTA)

    【從零開始學(xué)習(xí)JAVA | 第二十七篇】JAVA期末練習(xí)(PTA)

    目錄 前言: R7-5 Count the letters in a string (統(tǒng)計(jì)字符串中的字符) R7-1 找素?cái)?shù) R7-3 電話號(hào)碼同步(Java) 總結(jié): ????????臨近期末,我也更新一下PTA上的JAVA大題,希望各位都可以考出一個(gè)好的成績(jī)。 (Count the letters in a string) (統(tǒng)計(jì)字符串中的字符) Write a method that counts th

    2024年02月16日
    瀏覽(124)
  • 【從零開始學(xué)習(xí)JAVA | 第二十篇】常見API介紹 Math

    【從零開始學(xué)習(xí)JAVA | 第二十篇】常見API介紹 Math

    目錄 前言: ?MATH: Math類中的常用方法: 總結(jié): ? ? ? ? ? ? ? ? 本篇往后我們會(huì)詳細(xì)介紹一些常用的API,今天我們介紹的是Math的常用方法。但是其實(shí)我們不需要記住所有的方法,在日常工作中自己學(xué)會(huì)查詢API文檔就可以了。 Math類是Java中提供的一個(gè)標(biāo)準(zhǔn)類, 它包含了許多

    2024年02月15日
    瀏覽(27)
  • 【從零開始學(xué)習(xí)JAVA | 第二十一篇】常見API介紹 System

    【從零開始學(xué)習(xí)JAVA | 第二十一篇】常見API介紹 System

    目錄 前言: System: System類中靜態(tài)方法: 總結(jié): ? ? ????????? ? system 是一個(gè)很底層的 API,是一個(gè)工具類, 提供了一些與系統(tǒng)相關(guān)的方法 。他在我們寫項(xiàng)目的時(shí)候提供了一些非常實(shí)用的方法,本篇將會(huì)介紹一些實(shí)用的system API 的方法調(diào)用。 System類是Java語(yǔ)言提供的一個(gè)

    2024年02月15日
    瀏覽(90)
  • 從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之Collection集合及l(fā)ist集合(二十一)

    從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之Collection集合及l(fā)ist集合(二十一)

    1.1數(shù)組和集合的區(qū)別 相同點(diǎn) 都是容器,可以存儲(chǔ)多個(gè)數(shù)據(jù) 不同點(diǎn) 數(shù)組的長(zhǎng)度是不可變的,集合的長(zhǎng)度是可變的 數(shù)組可以存基本數(shù)據(jù)類型和引用數(shù)據(jù)類型 集合只能存引用數(shù)據(jù)類型,如果要存基本數(shù)據(jù)類型,需要存對(duì)應(yīng)的包裝類 1.2集合類體系結(jié)構(gòu) 1.3Collection 集合概述和使用 Collec

    2024年02月10日
    瀏覽(22)
  • 從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之Map集合(二十三)

    1.1Map集合概述和特點(diǎn) Map集合概述 Map集合的特點(diǎn) 雙列集合,一個(gè)鍵對(duì)應(yīng)一個(gè)值 鍵不可以重復(fù),值可以重復(fù) Map集合的基本使用 1.2Map集合的基本功能 方法介紹 方法名 說(shuō)明 V put(K key,V value) 添加元素 V remove(Object key) 根據(jù)鍵刪除鍵值對(duì)元素 void clear() 移除所有的鍵值對(duì)元素 boolean con

    2024年02月09日
    瀏覽(36)
  • 從零開始學(xué)習(xí) Java:簡(jiǎn)單易懂的入門指南之HashMap及TreeMap源碼解讀(二十四)

    Tip: 1.TreeMap添加元素的時(shí)候,鍵是否需要重寫hashCode和equals方法? 此時(shí)是不需要重寫的。 2.HashMap是哈希表結(jié)構(gòu)的,JDK8開始由數(shù)組,鏈表,紅黑樹組成的。既然有紅黑樹,HashMap的鍵是否需要實(shí)現(xiàn)Compareable接口或者傳遞比較器對(duì)象呢? 不需要的。 因?yàn)樵贖ashMap的底層,默認(rèn)是利用

    2024年02月07日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包