当前位置: 首页 > news >正文

厦门网站制作建设成都市建设领域网站咨询电话

厦门网站制作建设,成都市建设领域网站咨询电话,百度站长平台网站体检,网站制作视频教程免费首先说结论#xff1a;无论什么场景#xff0c;都不要对List使用for循环的同时#xff0c;删除List集合元素#xff0c;因为这么做就是不对的。 阿里开发手册也明确说明禁止使用foreach删除、增加List元素。 正确删除元素的方式是使用迭代器#xff08;Iterator#xff…首先说结论无论什么场景都不要对List使用for循环的同时删除List集合元素因为这么做就是不对的。 阿里开发手册也明确说明禁止使用foreach删除、增加List元素。 正确删除元素的方式是使用迭代器Iterator代码如下 ListString list new ArrayList(); IteratorString iterator list.iterator(); while (iterator.hasNext()) {// 删除元素iterator.remove(); }JDK8后lambda写法 list.removeIf(s - s.contains(a));不想知道为什么不能使用for循环删除List集合元素的看完前言就可以关闭本页面了想知道原因的继续往下看 下面举个实例场景看一下为什么不能使用for循环。 需求 一个List集合元素类型为String有N个元素删除这些元素中包含字符’‘a’的元素。 假设集合内容如下 ListString list new ArrayList(4); list.add(a); list.add(ab); list.add(abc); list.add(abcd);public static void main(String[] args) {ListString list new ArrayList(4);list.add(a);list.add(ab);list.add(abc);list.add(abcd);IteratorString iterator list.iterator();while (iterator.hasNext()) {if (iterator.next().contains(a)) {// 删除元素iterator.remove();}}System.out.println(list); }输出结果为 []错误答案1普通for循环for-i public static void main(String[] args) {ListString list new ArrayList(4);list.add(a);list.add(ab);list.add(abc);list.add(abcd);for (int i 0; i list.size(); i) {if (list.get(i).contains(a)) {list.remove(i);}}System.out.println(list); }输出结果为 [ab, abcd]分析 普通for循环遍历List集合的同时删除List中的元素是可以运行的代码但在大多数场景下不能使用这种方式上边的结果也印证了这一点虽然你的代码不会报错运行也正常但在本实例中这么写就是BUG。 BUG原因索引为i的元素删除后后边元素的索引自动向前补位即原来索引为i1的元素变为了索引为i的元素但是下一次循环取的索引是i1此时你以为取到的是原来索引为i1的元素其实取到是原来索引为i2的元素。 只要每删除一个元素就会漏掉下一个元素所以这种方式从逻辑上来说是存在bug的无论什么需求场景都不建议用这种方式因为不可控因素太多鬼知道生产环境中他会删掉多少元素同时漏掉多少元素。 既然这么写不报错那么个别特殊场景确实可以使用这种普通for循环删除元素的比如我们把实例的需求变动一下改为一个List集合元素类型为String有N个元素删除这些元素中包含字符’a’的元素如果有连续两个或以上元素包含’a’那么只删除当前连续元素中的奇数位元素。虽然这种场景适用但仍然不推荐还是因为太不可控。 错误答案2增强for循环foreach public static void main(String[] args) {ListString list new ArrayList(4);list.add(a);list.add(ab);list.add(abc);list.add(abcd);for (String str : list) {if (str.contains(a)) {list.remove(str);}}System.out.println(list); }运行报错 Exception in thread main java.util.ConcurrentModificationExceptionat java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)at java.util.ArrayList$Itr.next(ArrayList.java:859)at top.oldmoon.learn.test.ListTest.main(ListTest.java:24)使用百度翻译可以知道Concurrent Modification Exception并发修改异常 分析 可以简单的理解为foreach就不支持对集合中的元素进行增删操作但是可以修改。
http://www.lakalapos1.cn/news/20809/

相关文章:

  • 创意网站开发建筑素材网站
  • 设计装修网站大全中国建设银行三峡分行网站
  • 小学网站源码织梦手机网站怎么安装
  • 做电子外贸网站学校网站建设源代码
  • 海南网站建设及维护中学生网站制作
  • 橘色网站模板举例说明
  • 宜昌制作网站公司网站开发项目风险
  • 郑州做网站优化外包产品全网营销推广
  • 官网网站源码设计素材图片大全
  • 网站经营范围网站开发者都是英文怎样开发呢
  • 网站定制开发四大基本原则开业时网站可以做哪些活动吗
  • 网站怎么上线网站会员整合
  • 北京php网站制作wordpress忘记密码函数
  • 吕梁市网站建设公司网站建设的技术亮点
  • 网站跳转代码 html南宁公司网站模板建站
  • 潍坊网站制作最低价格海淀地区网站建设
  • 把网站从空间删除qq群引流推广软件
  • 如何做好一个企业网站设计中国科技成就
  • 怎么建立自己的网站?wordpress文章密码插件
  • 成都网站制作长沙临沂网站建设微信
  • 摄影网站设计与实现wap网站格式
  • php学什么可以做网站唐河做网站
  • 南山专业做网站公司可以用服务器做网站
  • 网站排名优化电话wordpress 迅搜
  • 专业的网站制作设计沈阳网站制作培训
  • 上蔡网站建设asp网站有哪些
  • 网站开发与解决技巧wordpress管理员地址
  • 速贝网站友情链接怎么做阿里云 wordpress 伪静态
  • 网站上做商城可用同一域名网站运营与建设 教学大纲
  • 青海建设兵团青岛战友网站厦门网站设计推广公司