搜索
写经验 领红包
 > 社会

javafoeach原理(java的foeach用法)

导语:【java】foreach原理

java foreach 原理(java的foreach用法)

【地震高岗,一派西山千古秀】

foreach语法最终被编译器转为了对Iterator.next()的调用

List<String> arrList = new ArrayList<>();        arrList.add(&34;);        arrList.add(&34;);        arrList.add(&34;);        for(String ag:arrList){            System.out.println(ag);        };        for (Iterator<String> iterat = arrList.iterator(); iterat.hasNext();){            System.out.println(iterat.next());        }       forEach像 for一样循环遍历数组,是用下标遍历来实现        for (int i = 0; i < arr.length; i++) {             type var = arr[i];            body-of-loop        }复制代码

1、ArrayList之所以能使用foreach循环遍历,是因为ArrayList所有的List都是Collection的子接口,而Collection是Iterable的子接口,ArrayList的父类AbstractList正确地实现了Iterable接口的iterator方法。

2、任何一个集合,无论是JDK提供的还是自己写的,只要想使用foreach循环遍历,就必须正确地实现Iterable接口

foreach使用限制

foreach在遍历集合的过程中不能修改集合中元素的值。不过,如果遍历的是数组,则不受此限制。

foreach在遍历过程中不能往集合中增加或删除元素,否则会抛出ConcurrentModificationException异常。即使在个别特殊情况下没有抛出这个异常,那也是因为巧合(下文会有说明)。

遍历过程中,集合或数组中同时只有一个元素可见,即只有“当前遍历到的元素”可见,而前一个或后一个元素是不可见的。

只能从前往后正向遍历,不能反向遍历

注意

在 subList 场景中,高度注意对父集合元素的增加或删除,均会导致子列表的遍历、增加、删除产生 ConcurrentModificationException 异常ArrayList之所以能使用foreach循环遍历,是因为ArrayList所有的List都是Collection的子接口,而Collection是Iterable的子接口,ArrayList的父类AbstractList正确地实现了Iterable接口的iterator方法。之前我自己写的ArrayList用foreach循环直接报空指针异常是因为我自己写的ArrayList并没有实现Iterable接口

3.任何一个集合,无论是JDK提供的还是自己写的,只要想使用foreach循环遍历,就必须正确地实现Iterable接口

【门朝大海,三河合水万年流】

本文内容由小竹整理编辑!