对于集合的遍历操作,可以使用 itrator foreach for 循环,下面比较一下各自的优缺点
来源:互联网 发布:微博 知乎 编辑:程序博客网 时间:2024/06/06 00:17
List<String> list = new ArrayList<String>(); list.add("11"); list.add("11"); list.add("33"); list.add("44"); for (int i =0; i < list.size(); i++) { if(list.get(i).equals("11")){ list.remove(i); } }输出:[11,33, 44]
分析:list底层实现是一个数组,删除一个之后下标发生了左移,发生错误,无论是修改还是删除,不建议使用这种方式
Iterator<String> it = list.iterator();while(it.hasNext()){ String temp = (String)it.next(); if(temp.equals("11")){ it.remove(); } } System.out.println(list.toString());输出:[33, 44]
分析:为什么这个可以呢?因为itrator的remove()方法有一步:expectedModCount = modCount,删除很方便,但是不能做修改
for(String loop : list){ if(loop.equals("11")){ list.remove(loop); } if(loop.equals("22")){ list.remove(loop); } } System.out.println(list.toString());输出: java.util.ConcurrentModificationException
分析:list底层有一个modcount标记,每次进行修改前会加1,再次删除是使用 if (modCount != expectedModCount) 进行判断是否相等,相等才可以操作。不能进行删除,但是可以修改
再补充一个问题:
String[] vendorIdArr = {"11","22","33"}; List<String> vendorIdResultList = Arrays.asList(vendorIdArr); vendorIdResultList.remove(0);输出:java.lang.UnsupportedOperationException
分析:java.util.Arrays$ArrayList 没有重写add(), removew()方法 ,使用 List vendorIdResultList = new ArrayList(Arrays.asList(vendorIdArr))代替List vendorIdResultList = Arrays.asList(vendorIdArr)即可
总结:修改使用foreach(),删除使用iterator(),既要删除又要修改只能采做标记的方式,遍历后再根据标记操作,如果非得使用一个方式进行,不是没有,那就是使用for循环,但是是从尾部向头部遍历,这样就可以避免元素删除后未遍历的元素下标发生偏移,但是不建议使用。
当工作逐渐占据了生活的全部,只能从代码中窃取快乐。
0 0
- 对于集合的遍历操作,可以使用 itrator foreach for 循环,下面比较一下各自的优缺点
- 对于foreach循环的使用
- 比较一下 JSF 和 Struts 之间各自的优缺点
- Foreach循环及For性能及使用上的比较
- iterator、for遍历集合的优缺点
- Java中foreach和for在循环遍历数组、集合方面的区别
- 分段分页方式的比较各自优缺点
- Java for循环和foreach循环的性能比较
- Java for循环和foreach循环的性能比较
- IEnumerable 接口---实现该接口里的成员的类,可以使用foreach循环访问集合
- JavaScript中forEach、for-in、for-of循环的比较
- iterator 遍历与for循环与foreach的优劣对比
- PHP中For、While、Foreach循环的比较
- ForEach集合循环操作
- java的for下标循环遍历和foreach循环遍历测试
- 解析一下lua的for循环遍历的不同
- ForEach循环的使用
- 两个for循环的优缺点
- sql 数据库远程配置(不/安装ssms)
- 什么是WiFiPineApple之深藏不漏
- [BZOJ3238] [AHOI2013] 差异 - 后缀自动机
- Unity2D多分辨率屏幕适配方案
- datatables 选项之DOM:定义表格控件在页面的显示顺序以及language语言选项
- 对于集合的遍历操作,可以使用 itrator foreach for 循环,下面比较一下各自的优缺点
- 【bzoj1003】【ZJOI2006】【物流运输】【最短路】【动态规划】
- 2017中国农业大学金融学考研交流群
- 一组看上去很舒服的配色搭配组合素材,进来了解下吧
- MySQL -- 通过命令转储sql
- Ob真静态
- tomcat 出现的PermGen Space问题
- c 语言进度条,获取终端大小
- Android安装ssh服务