增强for循环和普通for循环的区别
2017-03-09 10:46
267 查看
增强for循环亦为高级for循环。
增强for循环内部是使用的Iterator来遍历的,只能遍历数组和实现了Iterable接口的集合。优点是写法简便,无需获得数组、集合长度,也无需根据索引来访问元素。缺点是不能在循环里动态的删除元素和获取元素下标。
任何的增强for循环都可以改写为普通for循环。遍历集合所有元素的话用增强for循环更加简洁,如果是复杂的循环,还是用for循环比较好,for循环功支持索引取元素,可以使用下标来控制位置。
高级for有一个局限性,必须有被遍历的目标。
建议在遍历数组的时候,还是希望使用传统for,因为传统for可以定义角标。
凡是支持迭代器的都支持高级for
.而对于 LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。
下面用一个例子说明这点:
代码一
代码二
代码一在运行时抛出异常,代码二正常
原因分析:因为增强的for循环内部就是调用iterator实现的,在遍历的时候就将list转化为了迭代器,当迭代器被创建之后,如果从结构上对列表修改除非通过迭代器自身的remove、add方法,其他任何时间任何方式的修改,迭代器都会抛出ConcurrentModificationException异常。
增强for循环内部是使用的Iterator来遍历的,只能遍历数组和实现了Iterable接口的集合。优点是写法简便,无需获得数组、集合长度,也无需根据索引来访问元素。缺点是不能在循环里动态的删除元素和获取元素下标。
任何的增强for循环都可以改写为普通for循环。遍历集合所有元素的话用增强for循环更加简洁,如果是复杂的循环,还是用for循环比较好,for循环功支持索引取元素,可以使用下标来控制位置。
高级for有一个局限性,必须有被遍历的目标。
建议在遍历数组的时候,还是希望使用传统for,因为传统for可以定义角标。
凡是支持迭代器的都支持高级for
.而对于 LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。
下面用一个例子说明这点:
代码一
public static void removeEvensVer2(List<Integer> lst) { for (Integer x : lst) if (x % 2 == 0) lst.remove(x); System.out.println(lst); }
代码二
public static void removeEvensVer3(List<Integer> lst) { Iterator<Integer> itr = lst.iterator(); while (itr.hasNext()) if (itr.next() % 2 == 0) itr.remove(); System.out.println(lst); }
代码一在运行时抛出异常,代码二正常
原因分析:因为增强的for循环内部就是调用iterator实现的,在遍历的时候就将list转化为了迭代器,当迭代器被创建之后,如果从结构上对列表修改除非通过迭代器自身的remove、add方法,其他任何时间任何方式的修改,迭代器都会抛出ConcurrentModificationException异常。
相关文章推荐
- 增强for循环与普通for循环的区别2
- 增强for循环和普通for循环的区别
- 增强for循环和普通for循环的区别
- 增强for循环和普通for循环的区别
- 增强for循环和普通for循环的区别
- 增强for循环和普通for循环的区别
- 增强for循环和普通for循环的区别
- 增强for循环和普通for循环的区别
- java增强for循环与普通for的差异
- Java增强的for循环和普通for循环对比
- 普通for循环和增强for循环处理数组元素的一个差别
- 【Java】集合遍历增强for和普通for的区别
- java中的增强for循环与js中的增强for循环区别
- 增强型for循环和普通for循环在使用上的区别
- 增强for循环和for循环的区别
- 用 for/in 在 Java 5.0 中增强循环
- JAVA1.5新特性----for循环增强
- 增强for循环和泛型的使用
- 清华大学计算中心培训部-技术分享:Java基础教程:增强的for循环
- for与while循环读行及嵌套ssh的区别