增强 for (foreach)

本文介绍了Java 5.0中foreach循环的使用,展示了如何遍历ArrayList、数组以及如何自定义遍历类型。通过示例展示了如何遍历集合并打印元素,包括对数组和集合的不同处理方式。

增强 for (foreach)

package com.sq.sgg;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collection;

/*
    Java 5.0 提供了 foreach 循环迭代访问 Collection集合 和数组。
    遍历操作不需获取 Collection 或数组的长度,无需使用索引访问元素。
    遍历集合的底层调用 Iterator 完成操作。
    foreach 还可以用来遍历数组。

        要遍历的  遍历后自定   要遍历的
        元素类型  义元素名称   结构名称
    for(Person  person  :  persons){
        System.out.println(person.getName());
    }
 */
public class ForTest {

    @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",20));
        coll.add(new String("Tom"));
        coll.add(false);

        // for ( 集合元素的类型  局部变量  :  集合对象 )
        // 内部仍然调用了迭代器
        for(Object obj : coll){
            System.out.println(obj);
        }
//        123
//        456
//        Person{name='Jerry', age=20}
//        Tom
//        false
    }

    @Test
    public void test2(){
        int[] arr = new int[]{1,2,3,4,5,6};
        // for ( 数组元素的类型  局部变量  :  数组对象 )
        for (int i : arr) {
            System.out.println(i);
        }
//        1
//        2
//        3
//        4
//        5
//        6
    }

    @Test
    public void test3(){
        String[] arr = new String[]{"MM","MM","MM"};

        // 方式一:普通 for 赋值
//        for (int i = 0; i < arr.length; i++) {
//            arr[i] = "GG";
//        }

        // 方式二:增强 for 循环
        for (String s : arr){
            s = "GG";
        }

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        // 方式一:
//        GG
//        GG
//        GG

        // 方式二:
//        MM
//        MM
//        MM
    }
}

### 增强for循环与foreach的关系及使用场景 增强for循环(Enhanced For Loop)在许多编程语言中通常被称为 `foreach`,其语法和功能非常相似。它是一种简化迭代的语法结构,用于遍历数组或集合中的元素,而无需显式地管理索引或迭代器。 #### 增强for循环是否等同于foreach 增强for循环与 `foreach` 在概念上是相同的。它们都用于遍历集合或数组中的元素,并且底层实现通常是基于迭代器(Iterator)。例如,在 Java 中,增强for循环的语法如下: ```java for (Type element : collection) { // 处理element } ``` 这种语法实际上是对传统 for 循环的简化形式,底层仍然依赖于 `Iterator` 来访问集合中的每个元素[^1]。 #### 使用区别和联系 1. **语法简洁性** 增强for循环相比传统的 for 循环更加简洁,避免了手动管理索引或迭代器的复杂性。例如,以下代码展示了两种方式的对比: ```java // 传统for循环 List<String> list = Arrays.asList("a", "b", "c"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } // 增强for循环 for (String element : list) { System.out.println(element); } ``` 增强for循环通过隐藏迭代细节,使代码更易于阅读和维护[^1]。 2. **适用场景** 增强for循环适用于不需要索引或修改集合内容的场景。然而,如果需要在遍历过程中对集合进行过滤、转换或并行迭代,则不适合使用增强for循环[^4]。例如: - **过滤**:如果需要在遍历过程中删除元素,可能会引发并发修改异常。 - **转换**:如果需要替换集合中的元素,增强for循环无法直接更改原始集合中的值。 - **并行迭代**:如果需要同时遍历多个集合并灵活调整顺序,则需要使用其他方法。 3. **性能分析** 增强for循环的性能与直接使用 `Iterator` 相似,因为它本质上是基于 `Iterator` 实现的。因此,在性能方面没有显著差异[^1]。例如: ```java Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); System.out.println(element); } ``` 上述代码与增强for循环的功能等价,但后者更简洁。 4. **引用类型的影响** 在某些语言中,增强for循环可以通过引用访问集合中的元素,从而允许修改原始数据。例如,在 C++ 中: ```cpp std::vector<int> vec = {1, 2, 3}; for (int &elem : vec) { elem *= 2; // 修改原数据 } ``` 如果不声明为引用,则会操作元素的副本,而不是原始数据[^5]。 #### 总结 增强for循环与 `foreach` 是同一概念的不同称呼,其核心思想是通过隐藏迭代细节来简化代码。它适用于大多数简单的遍历场景,但在需要索引、修改集合或并行迭代时存在局限性[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值