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
原创粉丝点击