首页 > 编程知识 正文

c++迭代器,java迭代器iterator

时间:2023-05-04 04:19:41 阅读:148797 作者:92

迭代器是一种对象,用于遍历和选择序列中的对象,它提供了一种访问容器对象中元素的方式,而无需透露对象内部的详细信息。 迭代器允许开发人员在不知道容器底部结构的情况下实现容器遍历。 由于创建迭代器的成本很小,迭代器通常称为轻量级容器。

迭代器的使用主要有以下三个注意事项。

1 )容器的迭代器)方法返回迭代器,并使用迭代器的next )方法返回第一个元素。

2 )迭代器)的hasNext )方法来确定容器中是否还有任何元素,如果有,则可以使用next )方法来获得下一个元素。

3 )迭代器返回的元素可以用remove )方法删除。

迭代器支持派生的同级成员。 ListIterator仅存在于List中,支持在重复的List中添加或删除元素,并且可以在List中双向滚动。

迭代器的使用方法如下例所示。

package com.js;/* * *迭代器是Demo */import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class test { public void main (string [ ] args ) ) liststringll=newlinkedliststring; ll.add(first ); ll.add(second ); ll.add(third ); ll.add(Fourth ); 迭代器(迭代器=ll .迭代器); iterator.hasNext (; (stringstring=(string ) iterator.next ); system.out.println(string; } }

执行结果如下。

第一个

塞孔多

third

财富

使用iterator ()方法时,经常会发生concurrentmodificationexception异常。 这通常是因为在使用迭代器遍历容器时添加或删除容器,或者是因为多线程操作,在一个线程使用迭代器遍历容器时另一个线程添加或删除容器。 以下主要介绍单线程抛出concurrentmodificationexception的情况。

package com.js;/* * *迭代器是Demo */import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class test { public void main (string [ ] args ) ) liststringll=newlinkedliststring; ll.add(first ); ll.add(second ); ll.add(third ); ll.add(Fourth ); 迭代器(迭代器=ll .迭代器); iterator.hasNext (; (stringstring=(string ) iterator.next ); system.out.println(string; if(string.equals(second ) ) (ll.add ) ) Fifth ); } }

执行结果: first

塞孔多

exceptioninthread ' main ' Java.util.concurrentmodificationexception

at Java.util.linked list $ list itr.checkforcomodification (unknown source ) ) ) ) ) ) ) ) ) ) ) ) ) )。

at Java.util.linked list $ list itr.next (unknown source ) ) ) ) ) ) ) )。

atcom.js.test.main (test.Java :17 ) )。

抛出上述异常的主要原因是在容器的iterator )方法返回iterator对象时,将容器中包含的对象数赋给一个变量expectedModCount。 next ) )调用方法时,比较变量expectedModCount和容器中实际对象的数量modCount的值是否相等。抛出concurrentmodificationexception异常解决方案是将在遍历期间要删除的对象保存在集合中,在遍历完成后调用removeAll ()方法将其删除,或使用iterator.remove ) )方法。

以上主要介绍了单线程的解决方案,如果多线程访问容器的过程中concurrentmodificationexception出现异常,该如何解决呢?

1 ) JDK 1.5版引入了线程安全容器,如ConcurrentHashMap和CopyOnWriteArrayList。 您可以使用这些线程安全的容器来代替非线程安全的容器。

2 )使用迭代器遍历容器时,对容器的操作存储在synchronized代码块中,但如果引用程序具有高并发性,这将严重影响程序的性能。

引申:迭代器和list迭代器有什么区别?

迭代器只能向前遍历集合,适合获取删除元素。 ListIterator继承自Iterator,专用于List,允许您从两个方向遍历List,同时支持元素更改。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。