Java中的增强 for 循环 foreach

foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理。能够提高性能,并减少代码出错的几率。在 Java 中还有比如 泛型、自动拆箱、自动装箱、内部类、枚举等等。

  foreach 是用来对数组或者集合进行遍历的语法。具体语法如下:


1

2

3


for(元素类型 ele : 数组名/Iterable 实例){

 

}

  下面我们用 foreach 来对数组和一个集合进行遍历:


1

2

3

4

5

6

7

8

9

10

11

12


int [] array = {1,2,3};

for(int i : array){

  System.out.println(i);

}

    

List list = new ArrayList();

list.add(1);

list.add(2);

list.add(3);

for(Object obj : list){

    System.out.println(obj);

}

  然后我们可以通过反编译工具,查看 class 文件内容:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22


int array[] = {1,2,3};

   int [] array$ = array;

   for(int len$ = array$.length, i$ = 0; i$<len$; ++i$ )

   {

       int i = array$[i$];

       {

           System.out.println(i);

       }

   }

   

   

   List list = new ArrayList();

   list.add(1);

   list.add(2);

   list.add(3);

   for(java.util.Iterator i$ = list.iterator(); i$.hasNext();)

   {

       String s = (String) i$.next();

       {

           System.out.println(s);

       }

   }

  很明显:

    1、对于数组,foreach 循环实际上还是用的普通的 for 循环

     2、对于集合,foreach 循环实际上是用的 iterator 迭代器迭代

注意:如果我们想一边迭代,一边删除集合中的元素,如下:


1

2

3

4

5

6

7


List list = new ArrayList();

list.add(1);<br>    list.add(2);

   list.add(3);

for(Object obj : list){

  System.out.println(obj);

  list.remove(obj);  //一边迭代一边删除

}

  这样写会报如下错误:这是一个并发修改异常报错

原因:当迭代器运行的时候,在当前线程 A 中,会单独的创建一个线程 B。A 负责继续迭代,B 线程负责删除。B 线程每次都会去检查 A 线程中的元素是否相同,如果不是就会报错

因为上面删除的方法是 使用 Collection(ArrayList 的父类) 集合中的 remove()方法。该方法只能从集合中删除元素,不能把迭代器中的元素也删除了。

解决办法:使用 iterator 迭代器中的remove()方法


1

2

3

4

5

6


Iterator it = list.iterator();

while(it.hasNext()){

  Object obj = it.next();

  System.out.println(obj);

  if(obj.equals(1)){

    it.remove();//这里是用 迭代器的 remove() 方法<br><br>       //list.remove(obj); <br>       //如果你用 集合 方法,那么还是会报错<br>    }    <br>  }

  

时间: 2024-11-05 17:34:49

Java中的增强 for 循环 foreach的相关文章

java基础40 增强for循环(也叫foreach循环)

增强for循环是jdk1.5出现的新功能 1.增强for循环的作用 简化了迭代器的书写格式(注意:增强for循环底层还是使用了迭代器遍历) 2.增强for循环的格式 for(数据类型 变量名:遍历的目标){ } 3.增强for循环的适用范围 如果实现了 Iterable 接口或者数组对象都可以使用增强for循环 1 package com.dhb.pattern; 2 3 import java.util.Iterator; 4 5 /** 6 * @author DSHORE / 2018-6

Java Iterator和增强for循环 for each详解

Iterator是Java中的一个迭代器接口(Interface),用来提供标准的Java迭代器 Iterator支持泛型因为集合(Collection)类可以装入的类型是不确定的,从集合中取出的都是Object类型,加入泛型,就是告诉编译器确定要装入的对象类型,取值时就无需强制转换了. for each 是 Java 5 中新增的一个循环结构,本质上是一个Iterator,特点是可以用来遍历集合元素而不用考虑集合下标. 综合实例: package net.csdn.shf4715; impor

Java中如何跳出多重循环?

在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环.例如, ok: for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { System.out.println(“i=” + i + “,j=” + j); if(j == 5) break ok; } } 另外,不建议使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中

java中的for each循环

1.for each语句是java 5的新特征之一,在遍历集合,数组方面提供了很大的便利. 2.for each语句是for语句的特殊简化版本,但是for each语句并不能完全取代for语句,然而,任何的for each语句都可以改写为for语句版本. 3.for each的语句格式: for(元素数据类型  元素变量:遍历对象) { //循环体内容 } import java.util.Arrays; import java.util.List; import java.util.Array

Java中的可变参数以及foreach语句

Java中的可变参数的定义格式如下: 返回值类型  方法名称(类型 ... 参数名称){} foreach语句的格式如下: for ( 数据类型  变量名称 :数据名称){ ... } public class NewDemo01 { public static void main(String[] args) { // TODO Auto-generated method stub fun(); fun(1); fun(1,2,3,4); } public static void fun(in

JAVA基础_增强for循环:foreach

通常,访问List,Array,Set中的数据都是通过以下这种方式访问的 int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int i = 0; i < nums.length; i++) { System.out.println("i = " + i); } 自Java1.5之后,出现了一种更方便的访问方式:foreach int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; fo

增强for循环 -- foreach循环

1  作用 简化迭代器的书写格式.(注意:foreach循环的底层还是使用了迭代器遍历.) 2  适用范围 如果是实现了Iterable接口的对象或者是数组对象都可以使用foreach循环. 3  格式 for(数据类型 变量名 :遍历的目标){ } 示例: 1 public static void main(String[] args) { 2 HashSet<String> set = new HashSet<>(); 3 set.add("张三"); 4

052、Java中使用do…while循环实现1~100的累加

01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public static void main(String[] args) { int sum = 0; // 保存总和 int current = 1; // 循环的初始化条件 do { // 循环结束条件 sum += current; // 累加 current++; // 改变循环条件 } while

如何正确遍历删除List中的元素(普通for循环、增强for循环、迭代器iterator、removeIf+方法引用)

遍历删除List中符合条件的元素主要有以下几种方法: 普通for循环 增强for循环 foreach 迭代器iterator removeIf 和 方法引用 (一行代码搞定) 其中使用普通for循环容易造成遗漏元素的问题,增强for循环foreach会报java.util.ConcurrentModificationException并发修改异常. 所以推荐使用迭代器iterator,或者JDK1.8以上使用lambda表达式进行List的遍历删除元素操作. 以下是上述几种方法的具体分析: 1.