Java中iterator迭代器简介说明
下文笔者讲述java中iterator迭代器简介说明,如下所示
iterator迭代器简介
迭代器(Iterator): 用于遍历并选择序列中的对象 它对外提供一种访问一个容器(container)对象中的各个元素 而无需对外暴露对象内部细节的方法 使用迭代器的优点: 开发人员无需了解返回的容器结构
迭代器注意事项
1.使用容器的iterator()方法返回一个Iterator 然后使用Iterator的next()方法返回第一个元素 2.使用Iterator()的hasNext()方法判断容器中是否还有元素 如果有,可使用next()方法获取下一个元素 3.可以使用remove()方法删除迭代器返回的元素例:
import java.util.HashSet; import java.util.Iterator; public class InteratorTest { public static void main(String[] args){ HashSet set = new HashSet(); set.add("a"); set.add("b"); set.add("c"); set.add("d"); set.add("e"); for(Iterator iter = set.iterator(); iter.hasNext(); ){ String value = (String)iter.next(); System.out.println(value); } } } -----运行以上代码,将输出以下信息----- d e b c a
iterator迭代器改变时发生ConcurrentModificationException异常
迭代时 如果同时对其进行修改 会抛出java.util.ConcurrentModificationException异常例:
import java.util.Arraylist; import java.util.Iterator; public class InteratorTest { public static void main(String[] args){ ArrayList<Integer> list = new ArrayList<Integer>(); list.add(66); list.add(88); list.add(77); Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()){ Integer integer = iterator.next(); if (integer==77) { list.remove(integer); } else { System.out.println(integer); } } } } ----运行以上代码,将输出以下信息----- 66 88 Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(Unknown Source) at java.util.ArrayList$Itr.next(Unknown Source) at com.test.sort.InteratorTest.main(InteratorTest.java:13)变更为以下代码,则不会出现相应的异常信息
在使用arraylist的remove()方法就会出现问题 需要使用iterator.remove()方法就不会出现问题了例:
import java.util.ArrayList; import java.util.Iterator; public class InteratorTest { public static void main(String[] args){ ArrayList<Integer> list = new ArrayList<Integer>(); list.add(66); list.add(88); list.add(77); Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()){ Integer integer = iterator.next(); if (integer==77) { // list.remove(integer); iterator.remove(); } else { System.out.println(integer); } } } } ----运行以上代码,将输出以下信息----- 66 88
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。