`

Java 增强型的for循环 for each

 
阅读更多

For-Each循环

  For-Each循环也叫增强型的for循环,或者叫foreach循环。

  For-Each循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。

  For-Each循环的加入简化了集合的遍历。

 

其语法如下:

  for(type element: array)

  {

        System.out.println(element);

  }

 

例子

  其基本使用可以直接看代码:

  代码中首先对比了两种for循环;之后实现了用增强for循环遍历二维数组;最后采用三种方式遍历了一个List集合。

  

复制代码
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ForeachTest
{
    public static void main(String[] args)
    {
        int[] arr = {1, 2, 3, 4, 5};
        
        System.out.println("----------旧方式遍历------------");
        //旧式方式        
        for(int i=0; i<arr.length; i++)
        {
            System.out.println(arr[i]);
        }
        
        System.out.println("---------新方式遍历-------------");
        
        //新式写法,增强的for循环
        for(int element:arr)
        {
            System.out.println(element);
        }
        
        System.out.println("---------遍历二维数组-------------");
        
        //遍历二维数组
        
        int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} ;
        
        for(int[] row : arr2)
        {
            for(int element : row)
            {
                System.out.println(element);
            }
        }
        
        //以三种方式遍历集合List
        
        List<String> list = new ArrayList<String>();
        
        list.add("a");
        list.add("b");
        list.add("c");
        
        System.out.println("----------方式1-----------");
        //第一种方式,普通for循环
        for(int i = 0; i < list.size(); i++)
        {
            System.out.println(list.get(i));
            
        }
        
        System.out.println("----------方式2-----------");
        //第二种方式,使用迭代器
        for(Iterator<String> iter = list.iterator(); iter.hasNext();)
        {
            System.out.println(iter.next());
        }
        System.out.println("----------方式3-----------");
        //第三种方式,使用增强型的for循环
        for(String str: list)
        {
            System.out.println(str);
            
        }
    }

}
复制代码

 

  For-Each循环的缺点:丢掉了索引信息。

  当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。

 

满足什么条件才可以使用for-each呢?实现了Iterable接口的对象都可以使用for-each循环。这个简单的接口由单个方法组成,下面就是这个接口的示例额: 


1.public interface Iterable<E> { 
2.  Iterator<E> iterator(); 
3.}

实现Iterable接口并不难。如果你在变相的类型表示的一组元素,即使你选择不让它实现Collection,也要让它实现Iterable。这样可以允许用户利用for-each循环遍历你的类型,会令用户永远感激不尽的。 

总之,for-each循环在简洁性和预防bug方面有着传统的for循环无法比拟的优势,并且没有性能损失,我们应该尽可能地使用for-each循环。不过,遗憾的是在以下三种情况下是不能使用for-each的: 

1.过滤 
如果要遍历集合,并删除选定的元素,就需要使用显势的迭代器,以便可以调用它的remove方法。 

2.转换 
如果需要遍历列表或者数组,并取代它部分或者全部的元素值,就需要列表迭代器或者数组索引,以便设定元素的值。 

3.平行迭代 
如果需要并行地遍历多个集合,就需要显式地控制迭代器和数组索引变量,以便所有的迭代器或者索引值变量都可以得到同步前移。 

 

foreach写失效的问题

Java中的细节一定要清楚,否则非常容易出现问题。例如这个场景:遍历一个集合,对符合某种条件的元素做修改。大家往往会写出如下代码:

期待的结果是:
2
2
3
但实际输出为:
1
2
3
这是很容易掉进去的陷阱。即通过foreach遍历对集合元素进行修改。在以为变更已发生的时候,其实变更没有发生。造成数据写入失败。因为

根据oracle的官方文档,正式翻译应该如下

即:foreach里头的的 temp变量只是一个局部变量,而且还是集合中元素的一个副本,并不是元素本身。

 

分享到:
评论

相关推荐

    浅谈java 增强型的for循环 for each

    Java中的增强型for循环,又称为foreach循环,是自JDK 5.0引入的一种新的迭代方式,旨在简化对集合和数组的遍历操作。它通过简化语法,使得程序员可以更加专注于业务逻辑,而不必关心索引管理和迭代器的具体实现。 ...

    Java循环语句之for共4页.pdf.zip

    Java 5引入了一种更简洁的循环方式,被称为for-each循环或增强型for循环,它主要用于遍历数组或集合。基本语法如下: ```java for (类型 变量 : 集合或数组) { // 循环体代码 } ``` 例如,遍历一个整数数组: ```...

    Java循环技巧大全

    #### 二、增强型For循环(For-Each循环) 增强型For循环是Java 5引入的一种新的循环机制,用于简化对数组或集合的操作。例如: ```java String[] arr = new String[]{"a", "b", "c"}; for (String s : arr) { ...

    JDK1.5(5.0)增强循环的讲解[.txt]

    在Java编程语言中,JDK 1.5(也称为JDK 5.0)引入了许多新特性,其中一项重要改进就是对循环结构的增强,尤其是`for-each`循环,也被称为增强型for循环。这个特性显著提高了代码的简洁性和可读性,尤其在处理集合、...

    Java for循环几种写法整理

    在J2SE 1.5中引入的增强型for循环,也称为foreach或for-each loop,简化了遍历数组和集合的过程。例如: ```java int[] integers = {1, 2, 3, 4}; for (int i : integers) { System.out.println(i); } ...

    迭代大师的修炼之道:Java中Iterator与增强for循环的深度解析

    本文将重点探讨两种常用的迭代方式——`Iterator`接口和`Enhanced for loop`(增强型for循环),并从多个角度对比分析它们的特点、应用场景以及使用技巧。 #### 二、Iterator:传统智慧的传承 **1. 概念** `...

    详解JAVA中的for-each循环与迭代

    接下来,我们转向`for-each`循环,也称为增强型for循环,自Java 5引入以来,它极大地简化了遍历集合和数组的过程。`for-each`循环的语法如下: ```java for (Type item : collectionOrArray) { // 使用item } ``` ...

    JDK5.0新特性 常量 、枚举、 for each、反射

    本文将深入探讨其中的四个关键特性:常量、枚举、for each循环(也称为增强型for循环)以及反射。 首先,让我们来看看“常量”。在JDK 5.0之前,我们通常使用final关键字来创建不可变的变量,但这样的变量并非真正...

    Java-forloop:使用for循环显示结果

    Java 5引入了一种更简洁的for循环形式,称为增强型for循环或for-each循环,用于遍历数组和集合: ```java int[] numbers = {1, 2, 3, 4, 5}; for (int number : numbers) { System.out.println(number); } ``...

    java代码-for循环练习

    对于Java集合框架中的List,可以使用增强型`for`循环(也称为foreach循环): ```java List&lt;String&gt; list = Arrays.asList("a", "b", "c"); for (String item : list) { System.out.println(item); } ``` 这种循环...

    java遍历数组方法.txt

    Java提供了多种遍历数组的方法,包括使用传统的for循环、增强型for循环(for-each循环)、`Arrays`类中的方法以及转换数组到集合后的操作等。下面将详细介绍这些方法及其应用场景。 #### 1. 通过索引遍历数组 这是...

    java Map 遍历方法

    本篇文章将详细介绍几种常用的遍历`Map`的方法,包括使用传统迭代器(Iterator)、增强型for循环(For-Each循环)以及通过键集(Key Set)进行遍历。 #### 一、使用Iterator遍历Map 1. **通过`entrySet()`获取迭代...

    java 中ArrayList迭代的两种实现方法

    增强型for循环是Java 5引入的一种简洁的迭代方式,适用于所有的Iterable类型,包括ArrayList。这种方式的语法更简洁,但不提供移除元素的功能。以下是使用增强型for循环遍历ArrayList的示例: ```java System.out....

    java编程思想教学材料——第四讲Controlling Execution

    此外,Java引入了`for-each`循环,也称为增强型`for`循环,简化了数组和集合的遍历。`for-each`循环不需要显式地处理索引,只需指定遍历的集合和迭代变量。例如,在`ForEachFloat`类中,可以方便地遍历浮点数数组。 ...

    JAVA的高级新特性

    - For-Each循环,又称为增强型for循环,是从Java 5开始引入的。它的主要目的是简化对数组和集合的遍历。在传统的for循环中,我们需要手动初始化、递增和检查终止条件。而For-Each循环通过以下语法糖简化了这一过程...

    循环 参考代码.zip

    9. **foreach循环**:在某些语言(如Java和C#)中,foreach(也称为for-each或增强型for循环)用于遍历集合或数组中的每个元素。 10. **循环优化**:减少不必要的循环,使用适当的数据结构,以及提前终止循环条件都...

    JAVA1.5新特性

    对于集合的遍历,JAVA 1.5引入了增强型for循环,也称为for-each循环,简化了迭代过程,使代码更加简洁易读。这种循环直接针对集合中的每个元素执行操作,无需显式创建迭代器。 #### 使用示例 ```java List&lt;String&gt; ...

    java、python、JavaScript以及jquery循环语句的区别

    此外,Java 5引入了增强型for循环(也称为foreach循环),简化了遍历数组和集合的过程: ```java int[] arr = {1, 2, 3, 4}; for(int element : arr) { System.out.println(element); } ``` Java中的循环控制...

Global site tag (gtag.js) - Google Analytics