增强for循环和传统for循环有什么区别

如题所述

增强for循环亦为高级for循环。

增强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 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);  

    }   

    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异常。

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-04-04
增强for循环只用于查询,不能实现改和删除;
普通循环都能做……
不过增强for循环代码写起来容易一些
增强for循环的本质是定义变量,依次把集合的每个值都依次复制到变量进行操作
但是普通for循环一般都是使用集合的原有值进行操作。
相似回答