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

怎样做汽车网站建设长尾词挖掘免费工具

怎样做汽车网站建设,长尾词挖掘免费工具,疾病预防控制中心,wordpress很难前天看到一篇文章什么?for循环也会出问题?,里面涉及到在for循环中修改集合,想起来自己刚入行的时候就碰到过类似的问题,于是复现了一下文章中的问题,并试验了其它在循环中修改集合的方法。 底层原理参考什…

前天看到一篇文章什么?for循环也会出问题?,里面涉及到在for循环中修改集合,想起来自己刚入行的时候就碰到过类似的问题,于是复现了一下文章中的问题,并试验了其它在循环中修改集合的方法。

底层原理参考什么?for循环也会出问题?这篇文章的分析

1. 在fori中修改集合

  • 在fori中修改集合,不会抛出异常
  • 在fori中移除元素,部分元素可能会被跳过,无法被遍历到
  • 在fori中添加元素,遍历时元素不会被跳过,但如果添加的元素恰好满足添加元素的条件,可能导致无限循环

代码如下:

import java.util.ArrayList;
import java.util.List;public class TestFor {public static void main(String[] args) {List<Integer> list = new ArrayList<Integer>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);System.out.println("*****遍历时移除元素*****");for (int index = 0; index < list.size(); index++) {Integer num = list.get(index);System.out.println("当前遍历:" + num);if (num % 2 == 0) {list.remove(num);System.out.println("移除:" + num);}}list.forEach(o -> System.out.print(o + "\t"));System.out.println();list.clear();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);System.out.println("*****遍历时添加元素*****");for (int index = 0; index < list.size(); index++) {Integer num = list.get(index);System.out.println("当前遍历:" + num);if (num % 2 == 0) {int addNum = 101 + num; // 让添加进去的addNum为奇数,防止后面都是偶数,导致无限循环list.add(addNum);System.out.println("添加:" + addNum);}}list.forEach(o -> System.out.print(o + "\t"));}
}

运行结果:

*****遍历时移除元素*****
当前遍历:1
当前遍历:2
移除:2
当前遍历:4
移除:4
1    3    5
*****遍历时添加元素*****
当前遍历:1
当前遍历:2
添加:103
当前遍历:3
当前遍历:4
添加:105
当前遍历:5
当前遍历:103
当前遍历:105
1    2    3    4    5    103    105

2. 在迭代器iterator中修改集合

  • 在iterator中通过iterator修改集合(remove),不会抛出异常
  • 在iterator中移除元素,元素不会被跳过,但iterator.remove()前,必须先执行iterator.next(),将next element的索引+1,否则会出现IllegalStateException
  • 使用iterator遍历元素时,跳过iterator直接去修改list,只要修改后再次执行iterator.next(),都会出现ConcurrentModificationException
  • 使用iterator遍历元素时,即便在最后一次遍历中(此时iterator.hasNext()为false)才执行list.add()或list.remove(),也会导致iterator.hasNext()从false变为true

代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;public class TestFor {public static void main(String[] args) {List<Integer> list = new ArrayList<Integer>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);System.out.println("*****遍历时移除元素*****");Iterator<Integer> iterator = list.iterator();while (iterator.hasNext()) {// iterator.remove()前,必须先执行iterator.next(),将next element的索引+1,否则会出现IllegalStateExceptionInteger num = iterator.next();System.out.println("当前遍历:" + num);if (num % 2 == 0) {iterator.remove();System.out.println("移除:" + num);}}list.forEach(o -> System.out.print(o + "\t"));System.out.println();list.clear();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);System.out.println("*****遍历时修改list,修改后不执行iterator.next()*****");iterator = list.iterator();while (iterator.hasNext()) {Integer num = iterator.next();System.out.println("当前遍历:" + num);if (num == 5) {// list.add()、list.remove()都会导致iterator.hasNext()从false变为trueCollections.sort(list);System.out.println("===>排序");}}list.forEach(o -> System.out.print(o + "\t"));System.out.println();list.clear();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);System.out.println("*****遍历时修改list,修改后执行iterator.next()*****");iterator = list.iterator();while (iterator.hasNext()) {Integer num = iterator.next();System.out.println("当前遍历:" + num);if (num == 3) {Collections.sort(list);System.out.println("===>排序");}}list.forEach(o -> System.out.print(o + "\t"));}
}

运行结果:

*****遍历时移除元素*****
当前遍历:1
当前遍历:2
移除:2
当前遍历:3
当前遍历:4
移除:4
当前遍历:5
1    3    5
*****遍历时修改list,修改后不执行iterator.next()*****
当前遍历:1
当前遍历:2
当前遍历:3
当前遍历:4
当前遍历:5
===>排序
1    2    3    4    5
*****遍历时修改list,修改后执行iterator.next()*****
当前遍历:1
当前遍历:2
当前遍历:3
===>排序
Exception in thread "main" java.util.ConcurrentModificationExceptionat java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013)at java.base/java.util.ArrayList$Itr.next(ArrayList.java:967)at http.TestFor.main(TestFor.java:56)

3. 在foreach中修改集合

查看编译后的.class后可知,foreach只是迭代器iterator的语法糖,编译后也是用iterator遍历,所以跟在迭代器iterator中修改集合一样

  • 在foreach中没有提供修改list的接口,在非最后一次遍历中修改list会出现ConcurrentModificationException
  • 使用foreach遍历元素时,只在最后一次遍历中修改list(不执行list.add()或list.remove(),而是其它操作比如排序),不会出现ConcurrentModificationException
  • 使用foreach遍历元素时,即便在最后一次遍历中才执行list.add()或list.remove(),也会出现ConcurrentModificationException

代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class TestFor {public static void main(String[] args) {List<Integer> list = new ArrayList<Integer>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);System.out.println("*****遍历时修改list,最后一次遍历时修改(不涉及list.add()、list.remove())*****");for (Integer num : list) {System.out.println("当前遍历:" + num);if (num == 5) {// 查看编译后的.class后可知,foreach只是iterator的语法糖,编译后也是用iterator遍历// 如果在最后一次遍历中执行list.add()或list.remove(),会导致ConcurrentModificationExceptionCollections.sort(list);System.out.println("===>排序");}}list.forEach(o -> System.out.print(o + "\t"));System.out.println();System.out.println("*****遍历时修改list,在非最后一次遍历时修改*****");for (Integer num : list) {System.out.println("当前遍历:" + num);if (num == 3) {Collections.sort(list);System.out.println("===>排序");}}list.forEach(o -> System.out.print(o + "\t"));}
}

运行结果:

*****遍历时修改list,最后一次遍历时修改(不涉及list.add()、list.remove())*****
当前遍历:1
当前遍历:2
当前遍历:3
当前遍历:4
当前遍历:5
===>排序
1    2    3    4    5
*****遍历时修改list,在非最后一次遍历时修改*****
当前遍历:1
当前遍历:2
当前遍历:3
===>排序
Exception in thread "main" java.util.ConcurrentModificationExceptionat java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013)at java.base/java.util.ArrayList$Itr.next(ArrayList.java:967)at http.TestFor.main(TestFor.java:27)

总结

  • 尽量不要在遍历中修改集合本身(修改集合中的元素的属性没问题),除非你能明确知道该操作导致的后果。
  • 如果需要在循环中移除元素,可以使用迭代器iterator。
http://www.tj-hxxt.cn/news/14305.html

相关文章:

  • 西安博威建设工程有限公司招聘网站品牌seo主要做什么
  • 贵州网站建设hsyunso免费建立网站步骤
  • 网站项目建设策划书流程西安网站建设网络推广
  • 网站建设方案书腾讯企点账户中心
  • 爱站网seo查询上海网络推广营销策划方案
  • 聊城网站建设网络广告营销对应案例
  • 海南做网站公司哪家好开网店怎么开 新手无货源
  • 营销型网站建设成为企业发展新趋势华为手机网络营销策划方案
  • 沈阳市网站建设报价百度灰色关键词代发
  • 北京网站建设qq群产品推广方案ppt模板
  • 网站后台收入怎么做会计分录附近广告公司联系电话
  • 产品展示网站含后台网站模板下载恩施seo整站优化哪家好
  • 刘素云网站脱孝怎样做seo网站推广软件
  • 潮州南桥市场中国建设银行网站优化关键词怎么做
  • 真人做爰网站在百度上打广告找谁
  • 怎么样做一家卖东西的网站百度竞价推广出价技巧
  • 郴州市人力资源考试网石家庄seo外包公司
  • 免费建博客网站百度登录页
  • 社交网站设计seo chinaz
  • 做音乐网站要求神童预言新冠2023结束
  • 上海做网站优化公司seo排名app
  • 青岛网站建站公司网络竞价
  • 长沙专业做网站公司哪家好小璇seo优化网站
  • 域名建网站公司网站优化设计的基础是网站基本要素及每个细节的优化
  • net大规模网站开发视频产品网络推广方式
  • 郑州做网站优化外包青岛网站制作设计
  • 万网可以花钱做网站搜索关键词排名一般按照什么收费
  • 个体工商户可以做网站吗外包公司
  • 集团门户网站建设费用科目谷歌seo是指什么意思
  • 佛山网页网站设计网课培训机构排名前十