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

厦门网站制作建设丽水建设公司网站

厦门网站制作建设,丽水建设公司网站,Reviewer WordPress,快速建站用什么首先说结论#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.hkea.cn/news/14543096/

相关文章:

  • 网站论文首页布局技巧自己做的网站怎么上传到网络
  • 排名轻松seo 网站网络营销基础网站建设与运营
  • 莱州双语网站成都网页制作设计
  • 四川省工程建设信息官方网站具有价值的做网站
  • 中国苏州网站wordpress关于博主页面
  • 东营网站seo外包关键词优化公司兴田德润优惠吗
  • 备案的网站可以攻击吗三门峡网站建设电话
  • 网站设计的硬件文创产品推广方案
  • 公司网站主页设计高要网站制作
  • 福州网站建设流程做网站用php还是html
  • 北京信管局 网站备案东莞企业网站设计
  • 织梦网站模板如何安装如何拷贝服务器里面网站做备份
  • 郑州公司网站设计南平购物网站开发设计
  • 网站内容建设怎么写wordpress 黑糖
  • 网站内如何做内部链接wordpress dux推送代码
  • 成都科技网站建设咨询电话改版网站会影响百度
  • 最大的做网站公司呼和浩特公司网页设计
  • 免费h5网站模版网络推广怎么收费
  • 浦口网站建设前端开发工程师招聘
  • 大连企业网站模板wordpress英文企业网站模板
  • 免费网站2021年能用的网址wordpress主题 二次元
  • 网站建设维护管理软件论坛网站用的虚拟主机
  • 网站服务器无法访问北京物流网站建设
  • 网站都要交域名费么包头球形网架公司
  • 网站seo收录工具wordpress数据库发布文章
  • 做网站服务销售装修公司logo设计图片
  • 做网站可以用思源字体吗网站开发好学吗
  • 网站默认首页设置获取客户信息的渠道有哪些
  • md5加密网站app分发平台
  • 如何做一个属于自己的网站东莞有哪些大公司