增强for循环和普通for循环的区别

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

增强for循环内部是使用的Iterator来遍历的,只能遍历数组和实现了Iterable接口的集合。优点是写法简便,无需获得数组、集合长度,也无需根据索引来访问元素。缺点是不能在循环里动态的删除元素和获取元素下标。

任何的增强for循环都可以改写为普通for循环。遍历集合所有元素的话用增强for循环更加简洁,如果是复杂的循环,还是用for循环比较好,for循环功支持索引取元素,可以使用下标来控制位置。

高级for有一个局限性,必须有被遍历的目标。
建议在遍历数组的时候,还是希望使用传统for,因为传统for可以定义角标。
凡是支持迭代器的都支持高级for

.而对于 LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。

 

例子:

package com.huawei.practice.test001;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.swing.text.StyledEditorKit.ForegroundAction;

/**
 * @author Allen
 * @version 创建时间:2017年9月13日 下午4:33:23
 * 类说明:
 */
public class zengqiangforxunhuan {
    
    public static void main(String[] args) {
        int a[]={2,3,4};
        int b[]={3,4,5,6,7,8,9};
        List<Integer> list=new ArrayList<Integer>();
        for(int i:b){
            list.add(i);
        }
        //removeEvensVer2(list);
        removeEvensVer3(list);
    }
    
     public static void removeEvensVer2(List<Integer> lst)  
     {  /*1.因为增强的for循环内部就是调用iterator实现的,在遍历的时候就将list转化为了迭代器,
         当迭代器被创建之后,如果从结构上对列表修改除非通过迭代器自身的
           remove、add方法,其他任何时间任何方式的修改,迭代器都会抛出
            ConcurrentModificationException异常。所以该方法会抛出异常。*/
         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(); 
        //2.当迭代器被创建之后,如果从结构上对列表修改除非通过迭代器自身的
        //remove、add方法,其他任何时间任何方式的修改,迭代器都会抛出
        //ConcurrentModificationException异常。
        //lst.add(55);    
        while (itr.hasNext())  
            if (itr.next() % 2 == 0)  
                itr.remove();  
      
        System.out.println(lst);  
    }   
}

 

转:

http://blog.csdn.net/zhushuai1221/article/details/52664060

 

posted @ 2017-09-13 17:55  Allen101  阅读(1925)  评论(0)    收藏  举报