foreach 和for语句比较
2015-08-26 17:49
309 查看
1、首先想到循环就是执行效率的问题,参考博客/article/6374661.html
2、
测试时候发现出现“ 集合已修改 ; 可能无法执行枚举操作 ”的问题
查阅了一下发现for和foreach的一个算是蛮重要的区别
foreach是取只读的,在取的时候数据不 能变(包括修改,删除,添加等),因为在取之前foreach的集合已经定好了,
我们一旦执行增删改,相当于一边遍历一边往里加东西,遍历不明白了。
要避免这个问题,可以使用for循环去完成此功能,或者先copy要foreach的对象,对copy的对象进行遍历,然后remove对象本身,不过copy的方法有时候并不太好用,最好还是用for解决。
我做的是符合条件的remove,for时,i++,所以当移除某项后,下一项补上来了,因此要在符合条件的时候再来个i--,使得remove后,for循环继续执行补上来的下一项,如果只删除一项那就没必要i--操作。直接在删除后break;跳出循环即可。
2、
测试时候发现出现“ 集合已修改 ; 可能无法执行枚举操作 ”的问题
查阅了一下发现for和foreach的一个算是蛮重要的区别
foreach是取只读的,在取的时候数据不 能变(包括修改,删除,添加等),因为在取之前foreach的集合已经定好了,
我们一旦执行增删改,相当于一边遍历一边往里加东西,遍历不明白了。
要避免这个问题,可以使用for循环去完成此功能,或者先copy要foreach的对象,对copy的对象进行遍历,然后remove对象本身,不过copy的方法有时候并不太好用,最好还是用for解决。
我做的是符合条件的remove,for时,i++,所以当移除某项后,下一项补上来了,因此要在符合条件的时候再来个i--,使得remove后,for循环继续执行补上来的下一项,如果只删除一项那就没必要i--操作。直接在删除后break;跳出循环即可。
相关文章推荐
- mac sublime3+xdebug+firefox调试环境的搭建
- 实现自定义的安卓拍照功能
- kafka学习(一)
- leetcode: Binary Tree Postorder Traversal
- iOS 指纹解锁
- C#观察者模式:面试经常遇到(猫叫、老鼠逃、人醒)
- hdu1020
- 正则表达式全部符号解释
- BLOCK传值 协议传值
- KEIL之新版V5使用
- 论C++的静态联编和动态联编
- DuiLib属性
- css图片上文字居中,兼容微信
- Error:Android Source Generator: [sdk] Android SDK is not specified.
- 2015.8.26
- XP下Winform背景透明问题
- java校验导入的模板
- 运维屌丝回答网传Linux运维面试题(四)
- 适配iPhone6和6P UITableView分割线会闪动(拖动UITableView的时候,分割线 一会儿变粗一会儿变细)解决办法
- 字典类型的json字符串中的key要用双引号,而不能用单引号