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
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


