当前位置: 首页 > 科技观察

Iterator迭代器究竟是什么?

时间:2023-03-11 21:02:10 科技观察

我们经常使用JDK提供的迭代接口来迭代Java集合。Iteratoriterator=list.iterator();while(iterator.hasNext()){Stringstring=iterator.next();//dosomething}迭代可以简单理解为遍历,是遍历各种容器中所有对象的一种标准化方式.迭代器模式是用于迭代集合类的标准访问器方法。它可以从不同类型的集合类中抽象出访问逻辑,从而避免将集合的内部结构暴露给客户端。没有迭代器的时候,我们都是这样处理的:数组处理:int[]arrays=newint[10];for(inti=0;ilist=newArrayList();for(inti=0;i=size)thrownewNoSuchElementException();Object[]elementData=ArrayList.this.elementData;if(i>=elementData.length)thrownewConcurrentModificationException();//cursor+1cursor=i+1;//lastRet+1并返回游标处的元素return(E)elementData[lastRet=i];}checkForComodification()主要判断集合的修改次数是否合法,即在遍历过程中判断集合是否被修改过。modCount用于记录ArrayList集合的修改次数,初始化为0。每当集合被修改(结构上的修改,内部更新不算在内),如add、remove等方法,modCount+1。所以如果modCount没有变化,说明集合内容没有被修改。该机制主要用于实现ArrayList集合的快速失败机制。所以要保证遍历过程不出错,就要保证遍历过程中集合不会发生结构变化(当然remove方法除外)。如果出现异常错误,我们应该仔细检查程序是否有错误,而不是Donotprocessaftercatch。remove()调用ArrayList本身的remove()方法删除lastRet位置元素,然后修改modCount。SubList.this#remove(lastRet)ArrayList#remove本文转载自微信公众号「JavaEdge」,可通过以下二维码关注。转载本文请联系JavaEdge公众号。