概述
Java:Iterator迭代器
JDK提供了一个遍历集合中所有元素的接口 Iterator 。它主要用于迭代访问 Collection 中的元素,因此 Iterator 的对象也被称为迭代器。
public static void main(String [] args) {
ArrayList list = new ArrayList();//创建ArrayList集合
list.add(10086);//向该集合中添加元素
list.add("你好");
list.add('a');
list.add("bbbb");
Iterator it = list.iterator();//获取Iterator对象
while(it.hasNext()) {//判断ArrayList中是否存在下一个元素
Object obj = it.next();//取出ArrayList集合中的元素
System.out.println(obj);
}
}
使用 next() 方法获取元素时,必须保证要获取的元素存在,否则,会抛出NoSuchElementException异常。
Iterator 迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素。
注意:使用 Iterator 在对集合中的元素进行迭代时,如果调用了集合对象 remove() 方法去删除元素之后,继续使用迭代器遍历元素,会出现异常。
public static void main(String[] args) {
ArrayList list = new ArrayList();//创建ArrayList集合
list.add(10086);//向该集合中添加元素
list.add("你好");
list.add('a');
list.add("bbbb");
Iterator it = list.iterator();//获取Iterator对象
while(it.hasNext()) {//判断ArrayList中是否存在下一个元素
Object obj = it.next();//取出ArrayList集合中的元素
if("你好".equals(obj)) {
list.remove(obj);
}
}
System.out.println(list);
}
运行结果会出现并发修改异常 ConcurrentModificationException ,这个异常是迭代器对象抛出的,出现异常的原因是集合中删除了元素会导致迭代器预期的迭代次数发生改变,导致迭代器的结果不准确。
Exception in thread "main" java.util.ConcurrentModificationException
为解决以上问题,可以采用两种方式:
- 找到元素后跳出循环不再迭代。
if("你好".equals(obj)) {
list.remove(obj);
break;
}
由于没有继续使用迭代器对集合中的元素进行迭代,因此,结合中删除元素对程序没有任何影响。
- 在集合的迭代期间对集合中的元素进行删除。
if("你好".equals(obj)) {
it.remove();
}
调用迭代器对象的 remove() 方法删除元素所导致的迭代次数变化,对于迭代器对象本身来说时可预知的。
希望可以帮助大家。
增强for循环
最后
以上就是默默河马为你收集整理的Java Iterator迭代器的全部内容,希望文章能够帮你解决Java Iterator迭代器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复