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

 我来答
greystar_cn
2017-11-13 · 知道合伙人软件行家
greystar_cn
知道合伙人软件行家
采纳数:16407 获赞数:17260
本人主要从事.NET C#方向的技术开发工作,具有10多年的各类架构开发工作经验。

向TA提问 私信TA
展开全部

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

dzmcobk
2018-04-04 · TA获得超过748个赞
知道小有建树答主
回答量:431
采纳率:76%
帮助的人:118万
展开全部
增强for循环只用于查询,不能实现改和删除;
普通循环都能做……
不过增强for循环代码写起来容易一些
增强for循环的本质是定义变量,依次把集合的每个值都依次复制到变量进行操作
但是普通for循环一般都是使用集合的原有值进行操作。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式