> 社会
javafoeach原理(java的foeach用法)
导语:【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接口
【门朝大海,三河合水万年流】
本文内容由小竹整理编辑!