Iterator的使用
来源:互联网 发布:c语言 登录系统 编辑:程序博客网 时间:2024/05/29 13:30
今天写代码的过程中,需要删除一个集合中的重复元素,直接上来就是for循环中判断删除,结果总是不对,这是因为在删除的过程中,集合中元素减少的同时,元素的下标也在变化。
直接上代码:
private void datas(){ list = new ArrayList<String>(); list.add("a"); list.add("a"); list.add("a"); list.add("b"); list.add("c"); list.add("a"); list.add("a");}
private void forDelete(){ Log.i(TAG, "删除前的集合===" + list.toString()); for (int i = 0; i < list.size(); i++) { if ("a".equals(list.get(i))) { list.remove(i); } } Log.i(TAG, "删除前的集合===" + list.toString());}
结果:
01-11 14:51:13.186 24151-24151/com.zhoujian.iterator I/MainActivity: 删除前的集合===[a, a, a, b, c, a, a]01-11 14:51:13.186 24151-24151/com.zhoujian.iterator I/MainActivity: 删除前的集合===[a, b, c, a]
这就需要用到了Iterator
private void iteratorFor(){ Log.i(TAG, "删除前的集合===" + list.toString()); for (Iterator iter = list.iterator(); iter.hasNext(); ) { String str = (String) iter.next(); if ("a".equals(str)) { iter.remove(); } } Log.i(TAG, "删除前的集合===" + list.toString());}
或者
private void iteratorWhile(){ Log.i(TAG, "删除前的集合===" + list.toString()); Iterator iter = list.iterator(); while (iter.hasNext()) { String str = (String) iter.next(); if ("a".equals(str)) { iter.remove(); } } Log.i(TAG, "删除前的集合===" + list.toString());}
结果:
01-11 14:55:11.811 1575-1575/com.zhoujian.iterator I/MainActivity: 删除前的集合===[a, a, a, b, c, a, a]01-11 14:55:11.812 1575-1575/com.zhoujian.iterator I/MainActivity: 删除前的集合===[b, c]
注意:在使用迭代器遍历的过程中不能删除或者增加集合中的元素,否则会报错
ConcurrentModificationException:并发修改异常
错误使用案例
private void errorMethod(){ Log.i(TAG, "删除前的集合===" + list.toString()); Iterator iter = list.iterator(); while (iter.hasNext()) { String str = (String) iter.next(); if ("a".equals(str)) { //list.remove("a"); list.add("e"); } } Log.i(TAG, "删除前的集合===" + list.toString());}
报错
Caused by: java.util.ConcurrentModificationException
源码下载:https://github.com/zeke123/Iterator
0 0
- iterator 的使用
- iterator的使用
- vector iterator 的使用
- iterator标签的使用
- iostream iterator的使用
- Iterator的使用
- iterator 的使用
- iterator标签的使用
- iterator迭代器的使用
- Iterator的使用
- iterator迭代器的使用
- Iterator迭代器的使用
- iterator的使用
- Iterator的使用
- Iterator的使用
- 迭代器的使用iterator
- Iterator的使用
- Iterator 的使用
- ORM 框架
- eventbus
- 前端面试题收集
- mysql的case then else end语句的使用,来显示多种结果之一
- ubuntu编译vim8.0
- Iterator的使用
- 每天一个linux命令(48):watch命令
- caffe的python接口学习(10):微调 & 直接训练
- FTC起诉D-Link销售不安全的路由器和摄像头
- css调整表格在屏幕上的位置
- android 获取系统底层信息
- Proc *C/C++入门--数组变量
- js有限状态机javascript-state-machine
- spring boot 入门荔枝