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

网站上线如何做公司名字谷歌关键词

网站上线如何做公司名字,谷歌关键词,怎么样做好网站运营,枣庄做网站优化ConcurrentModificationException并发修改异常 原因分析 可以通过遍历索引也可以通过迭代器进行遍历。在我们使用迭代器进行遍历集合的时候,会获取到当前集合的迭代对象。在里面有封装了迭代器的remove方法与集合自带的remove方法,如果我们调用迭代器对…

ConcurrentModificationException并发修改异常

原因分析

可以通过遍历索引也可以通过迭代器进行遍历。在我们使用迭代器进行遍历集合的时候,会获取到当前集合的迭代对象。在里面有封装了迭代器的remove方法与集合自带的remove方法,如果我们调用迭代器对象的remove方法是没问题的,但是当我们调用集合自带的remove方法时,就会产生ConcurrentModificationException 并发修改异常。也就是说,当我们通过非迭代器进行遍历集合的时候,是不允许集合本身在结构上发生变化的。
增删操作会导致 预期数量和 计数器的数量不一致,就会导致并发修改异常

解决方式

1,ListIterator列表迭代器(list特有的迭代器),将添加、删除元素交给迭代器去做,而非集合

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("B");
list.add("C");ListIterator<String> stringListIterator = list.listIterator();
while (stringListIterator.hasNext()) {String element = stringListIterator.next();if(StringUtils.equals(element,"C")) {// 在遍历时向列表中添加元素stringListIterator.add("D");}
}
System.out.println(list);//[A, B, B, C, D]

2,普通for循环删除时需要从后往前删除,因为从前往后删除可能会漏删(删除第一个B之后,索引到2,但是本来索引2的元素第二个B却来到了索引1的位置)

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("B");
list.add("C");for (int i = list.size()-1; i >= 0; i--) {if(StringUtils.equals(list.get(i),"B")) {list.remove("B");}
}System.out.println(list);

3,使用CopyOnWriteArrayList集合,底层解决并发修改异常,就可以使用集合的增删方法在遍历时操作

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("B");
list.add("C");CopyOnWriteArrayList<String> copyOnWriteArrayList = new CopyOnWriteArrayList(list);
for (String ele :copyOnWriteArrayList){if(StringUtils.equals(ele,"C")) {// 在遍历时向列表中添加元素copyOnWriteArrayList.add("D");}
}System.out.println(copyOnWriteArrayList);//[A, B, B, C, D]

4,当遍历时需要删除元素时,可以使用普通迭代器,普通迭代器没有新增方法

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("B");
list.add("C");
//普通迭代器,只能删除,没有add
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){String next = iterator.next();if(StringUtils.equals(next,"B")) {iterator.remove();//迭代器删除第一个B,然后hasNext拉到下一个B,迭代器再删除一次}
}
System.out.println(list);//[A, C]

5,增强for循环底层采用迭代器,遍历时删除(新增)只能用集合的删除(新增)方法,还会报并发修改异常

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("B");
list.add("C");for (String element : list) {//Caused by: java.util.ConcurrentModificationException: nullif(StringUtils.equals(element,"B")) {list.add("B");}
}
System.out.println(list);//[A, B, B, C, D]
http://www.rdtb.cn/news/17237.html

相关文章:

  • 安徽省住房和建设厅网站qianhu微建站
  • 网站建设金手指排名信誉怎样才能注册自己的网站
  • 南京触屏网站开发seo优化排名百度教程
  • 搜索不到我的网站网站推广哪个平台最好
  • 南充哪里做网站中国最新新闻
  • 外贸英文网站建设西安网站建设公司排名
  • 咸宁网站建设解决方案公司网站免费建站
  • 票务网站策划书苏州seo关键词排名
  • 网站模板用什么做网页开发流程
  • 短网址网站采集站seo课程
  • javaweb做网站实现邮件郑州seo关键词排名优化
  • 江苏高效网站制作公司关键词推广seo怎么优化
  • 商标版权的应用搜索引擎优化技术
  • 桥头镇做网站专业网站建设公司首选
  • 学网站开发和游戏开发那个兰州网站seo服务
  • 襄阳网站建设楚翼网络最近新闻内容
  • 在批发网站做一件代发网址注册在哪里注册
  • 深圳制作网站推荐网站定制设计
  • 去哪个网站做试用好网站查询平台官网
  • 河北三河建设局网站免费的h5制作网站
  • 深圳商业网站建设去哪家ip域名查询地址
  • wordpress太难用嘉兴关键词优化报价
  • 手机app制作网站优秀的网页设计案例
  • 计算机网站开发 武汉船舶学院什么是网络销售
  • 推广平台文案优化推广公司哪家好
  • 做网站技巧百度官方免费下载
  • 新疆品牌网站建设公司推广引流话术
  • 一个产品有两个品牌怎么做网站湖人最新消息
  • 网站建设进程方案seo顾问服务深圳
  • 智联招聘网站多少钱做的百度收录软件