欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java 增強型for循環(huán)語法詳解

 更新時間:2025年04月16日 15:57:59   作者:飛滕人生TYF  
增強型 for 循環(huán)(也稱為 “for-each” 循環(huán))是 Java 從 JDK 5 開始引入的一種便捷循環(huán)語法,旨在簡化對數(shù)組或集合類的迭代操作,這篇文章主要介紹了java 增強型for循環(huán) 詳解,需要的朋友可以參考下

Java 增強型 for 循環(huán)(Enhanced for Loop)詳解

增強型 for 循環(huán)(也稱為 “for-each” 循環(huán))是 Java 從 JDK 5 開始引入的一種便捷循環(huán)語法,旨在簡化對數(shù)組或集合類的迭代操作。

1. 基本語法

語法格式

for (類型 變量 : 迭代對象) {
    // 循環(huán)體
}
  • 類型:迭代對象中元素的類型。
  • 變量:每次迭代時,存儲當前元素的變量。
  • 迭代對象:數(shù)組或?qū)崿F(xiàn)了 Iterable 接口的集合(如 List、Set 等)。

2. 使用示例

2.1 遍歷數(shù)組

public class EnhancedForArray {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        for (int num : numbers) {
            System.out.println(num); // 輸出:1, 2, 3, 4, 5
        }
    }
}

2.2 遍歷集合

import java.util.ArrayList;
import java.util.List;
public class EnhancedForList {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>();
        fruits.add("Apple");
        fruits.add("Banana");
        fruits.add("Cherry");
        for (String fruit : fruits) {
            System.out.println(fruit); // 輸出:Apple, Banana, Cherry
        }
    }
}

3. 特性與限制

3.1 特性

簡潔性

  • 不需要手動管理索引或迭代器,代碼更易讀。
  • 對比傳統(tǒng) for 循環(huán),不需要獲取數(shù)組長度或調(diào)用集合的迭代器。

適用性廣泛

  • 可用于數(shù)組、List、Set、Map(遍歷 entrySet()、keySet()values())。

3.2 限制

無法修改集合結(jié)構(gòu)

  • 增強型 for 循環(huán)中,不能直接對集合進行 addremove 操作,否則會拋出 ConcurrentModificationException。
  • 示例:
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
for (String s : list) {
    if (s.equals("A")) {
        list.remove(s); // 會拋出異常
    }
}

如果需要修改集合結(jié)構(gòu),可以使用 迭代器

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String s = iterator.next();
    if (s.equals("A")) {
        iterator.remove(); // 安全地刪除元素
    }
}

無法訪問索引

增強型 for 循環(huán)中無法直接獲取元素的索引。如果需要索引,需使用傳統(tǒng) for 循環(huán):

String[] fruits = {"Apple", "Banana", "Cherry"};
for (int i = 0; i < fruits.length; i++) {
    System.out.println("Index " + i + ": " + fruits[i]);
}

只支持順序訪問

適用于 Iterable 接口的集合(如 List、Set),不適用于需要隨機訪問的場景。

4. 遍歷 Map 的增強型 for

4.1 遍歷 keySet

遍歷 Map 的所有鍵:

import java.util.HashMap;
import java.util.Map;
public class EnhancedForMap {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("A", 1);
        map.put("B", 2);
        map.put("C", 3);
        for (String key : map.keySet()) {
            System.out.println("Key: " + key + ", Value: " + map.get(key));
        }
    }
}

4.2 遍歷 entrySet

更高效地同時遍歷鍵和值:

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}

5. 適用場景

遍歷數(shù)組

  • 對于大小已知且不需要修改的數(shù)組,增強型 for 是最佳選擇。

遍歷集合

  • 遍歷 List、Set 等集合,尤其是當集合不需要修改時。

遍歷 Map

  • 使用 entrySet() 時,增強型 for 簡潔而高效。

簡化代碼

  • 避免手動管理索引或迭代器。

6. 常見問題

6.1 為什么增強型 for 循環(huán)不能修改集合?

增強型 for 底層使用了 迭代器 來遍歷集合,如果直接修改集合結(jié)構(gòu)(如添加或刪除元素),會導(dǎo)致迭代器失效,拋出 ConcurrentModificationException。

6.2 如何在增強型 for 中訪問索引?

可以在增強型 for 中手動維護索引:

String[] fruits = {"Apple", "Banana", "Cherry"};
int index = 0;
for (String fruit : fruits) {
    System.out.println("Index " + index + ": " + fruit);
    index++;
}

7. 底層實現(xiàn)

增強型 for 循環(huán)的本質(zhì)是使用了 迭代器 來實現(xiàn)的。

偽代碼

對于 Iterable 對象:

for (Type element : collection) {
    Iterator<Type> it = collection.iterator();
    while (it.hasNext()) {
        Type element = it.next();
        // 循環(huán)體
    }
}

對于數(shù)組:

for (Type element : array) {
    for (int i = 0; i < array.length; i++) {
        Type element = array[i];
        // 循環(huán)體
    }
}

8. 總結(jié)

優(yōu)點

  • 簡化代碼:適合大多數(shù)迭代場景,避免手動處理索引和迭代器。
  • 可讀性高:語法簡潔,專注于元素處理。

缺點

  • 不能直接操作索引。
  • 不支持修改集合結(jié)構(gòu)。
  • 適用于順序訪問,不適合隨機訪問場景。

增強型 for 循環(huán)是 Java 中對迭代器模式的進一步抽象,它讓遍歷變得更加簡單、高效,是開發(fā)中非常常用的工具。

到此這篇關(guān)于java 增強型for循環(huán) 詳解的文章就介紹到這了,更多相關(guān)java 增強型for循環(huán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java正則多字符串匹配替換

    Java正則多字符串匹配替換

    正則表達式異常強大,一直理解不深,用的也不深,這次項目中嘗試,體會到了它的強大之處。字符串查找,匹配,替換,正則無不能做,特別是靈活的運用子串匹配得到的變量值$1,$2,再進行二次處理能夠達到很巧妙的效果。
    2013-02-02
  • Java中StringBuilder字符串類型的操作方法及API整理

    Java中StringBuilder字符串類型的操作方法及API整理

    Java中的StringBuffer類繼承于AbstractStringBuilder,用來創(chuàng)建非線程安全的字符串類型對象,下面即是對Java中StringBuilder字符串類型的操作方法及API整理
    2016-05-05
  • Java的Tomcat和Servlet的運行原理詳解

    Java的Tomcat和Servlet的運行原理詳解

    這篇文章主要為大家詳細介紹了Java的Tomcat和Servlet,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 淺談java中Math.random()與java.util.random()的區(qū)別

    淺談java中Math.random()與java.util.random()的區(qū)別

    下面小編就為大家?guī)硪黄獪\談java中Math.random()與java.util.random()的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • resttemplate設(shè)置params的方法

    resttemplate設(shè)置params的方法

    RestTemplate設(shè)置請求參數(shù)的方式根據(jù)請求類型(GET/POST)和參數(shù)形式(路徑參數(shù)、查詢參數(shù)、JSON請求體)有所不同,下面通過本文給大家介紹resttemplate設(shè)置params的方法,感興趣的朋友一起看看吧
    2025-04-04
  • mybatis動態(tài)sql之Map參數(shù)的講解

    mybatis動態(tài)sql之Map參數(shù)的講解

    今天小編就為大家分享一篇關(guān)于mybatis動態(tài)sql之Map參數(shù)的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • mybatis-plus之如何實現(xiàn)in嵌套sql

    mybatis-plus之如何實現(xiàn)in嵌套sql

    這篇文章主要介紹了mybatis-plus之如何實現(xiàn)in嵌套sql問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • spring cloud gateway 如何修改請求路徑Path

    spring cloud gateway 如何修改請求路徑Path

    這篇文章主要介紹了spring cloud gateway 修改請求路徑Path的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之簡單鏈表的定義與實現(xiàn)方法示例

    Java數(shù)據(jù)結(jié)構(gòu)之簡單鏈表的定義與實現(xiàn)方法示例

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之簡單鏈表的定義與實現(xiàn)方法,簡單描述了鏈接的概念、原理,并結(jié)合實例形式分析了java定義與使用鏈表的相關(guān)步驟與操作技巧,需要的朋友可以參考下
    2017-10-10
  • Assert.assertNotNull()斷言是否是空問題

    Assert.assertNotNull()斷言是否是空問題

    這篇文章主要介紹了Assert.assertNotNull()斷言是否是空問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論