ArrayList中的迭代器

ArrayList需要遍历时,可以调用他的iterator()方法返回一个迭代器,然后用迭代器进行遍历。

ArrayList中的iterator:

public Iterator<E> iterator() {

returnnew Itr();

}

iterator()方法放回了一个Itr类实例,这个Itr类是ArrayList的一个内部类,实现了Iterator接口。

Itr源码如下:

/**

* An optimized version of AbstractList.Itr

*/

privateclass Itr implements Iterator<E> {

intcursor; // index of next element to return

intlastRet = -1; // index of last element returned; -1 if no such

intexpectedModCount = modCount;

publicboolean hasNext() {

returncursor != size;

}

@SuppressWarnings(“unchecked”)

public E next() {

checkForComodification();

inti = cursor;

if (i >= size)

thrownew NoSuchElementException();

Object[] elementData = ArrayList.this.elementData;

if (i >= elementData.length)

thrownew ConcurrentModificationException();

cursor = i + 1;

return (E) elementData[lastRet = i];

}

publicvoid remove() {

if (lastRet < 0)

thrownew IllegalStateException();

checkForComodification();

try {

ArrayList.this.remove(lastRet);

cursor = lastRet;

lastRet = -1;

expectedModCount = modCount;

} catch (IndexOutOfBoundsException ex) {

thrownew ConcurrentModificationException();

}

}

finalvoid checkForComodification() {

if (modCount != expectedModCount)

thrownew ConcurrentModificationException();

}

}

Itr类的三个成员变量。

cursor类似游标,指向迭代器下一个值的位置。

lastRet是迭代器最后一次取出的元素的位置。

expectedModCount的值为Itr初始化时候ArrayList的modCount的值。

modCount用于记录ArrayList内发生结构性改变的次数,而Itr每次进行next或remove的时候都会去检查expectedModCount值是否还和现在的modCount值,从而保证了迭代器和ArrayList内数据的一致性。

源码下载:

链接: http://pan.baidu.com/s/1pJK9jon

时间: 2025-01-04 05:29:50

ArrayList中的迭代器的相关文章

java-JAVA中ObjectInputStream中将多个Object存入ArrayList中

问题描述 JAVA中ObjectInputStream中将多个Object存入ArrayList中 ArrayList用迭代器存进文件的数据怎么取回到ArrayList中 循环判定是什么 我写了一个总是报 EOF异常 解决方案 我是手动在最后写入了一个结束标志 null out.writeObject(null); 读出的判定条件是 in.readObject()!=null

详解Java中Iterator迭代器的用法_java

迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级"对象,因为创建它的代价小. Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个Iterator.第一次调用Iterator的next()方法时,它返回序列的第一个元素.注意:iterator()方法是java.lang.Iterable接口,被Collection继承

浅析Lua中的迭代器

  这篇文章主要介绍了Lua中的迭代器,是Lua入门学习中的基础知识,需要的朋友可以参考下 迭代器是一种结构,使能够遍历所谓的集合或容器中的元素.在Lua中,这些集合通常是指那些用于创建各种数据结构,如数组表. 一般对于迭代器 一个通用的迭代器提供的键值对集合中的每个元素.下面一个简单的实例. 代码如下: array = {"Lua", "Tutorial"} for key,value in ipairs(array) do print(key, value) e

JavaScript中的迭代器和生成器详解

 处理集合里的每一项是一个非常普通的操作,JavaScript提供了许多方法来迭代一个集合,从简单的for和for each循环到 map(),filter() 和 array comprehensions(数组推导式).在JavaScript 1.7中,迭代器和生成器在JavaScript核心语法中带来了新的迭代机制,而且还提供了定制 for-in 和 for each 循环行为的机制. 迭代器 迭代器是一个每次访问集合序列中一个元素的对象,并跟踪该序列中迭代的当前位置.在JavaScript

arraylist-如何显示 Arraylist中降序排列的日期?

问题描述 如何显示 Arraylist中降序排列的日期? 我在 ArrayList 中保存了数据,并把它们降序排列.现在我想把数据在 ListView 中显示出来.如何把数据显示出来? spndata.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> arg0 View arg1 int position long arg3) { switch (

对ArrayList中的自定义类型进行搜索

一般情况下我只需要使用ArrayList.Contains()方法就可以判断某个元素是否存在,但如果ArrayList中的为自定义的类就需要自己实现,如下面例子: 如我们有一个类: public class Employee{ public int EmployeeID { get;set; } public string EmployeeName { get;set; } public DateTime BirthDate { get; set; }} 我们要实现对ArrayList中存储的E

Java删除ArrayList中的重复元素的2种方法

ArrayList是Java中最常用的集合类型之一.它允许灵活添加多个null元素,重复的元素,并保持元素的插入顺序.在编码时我们经常会遇 到那种必须从已建成的ArrayList中删除重复元素的要求.这篇文章将给出两种从ArrayList中删除重复元素的方法. 方法1:使用HashSet删除ArrayList中重复的元素 在该方法中,我们使用HashSet来删除重复的元素.如你所知,HashSet不允许有重复的元素.我们使用HashSet的这个属性来删除已建 成的ArrayList中的重复元素.

vector&amp;amp;lt;string&amp;amp;gt;中,迭代器指向的某个字符是什么类型

问题描述 vector<string>中,迭代器指向的某个字符是什么类型 string a; cin>>a; int Count=0; int x=0;int y=0; int buf1[10],buf2[10]; char t; vector<string> str(1,a); for(vector<string>::iterator be=str.begin();be!=str.end();++be){ if(*be>="0"&

设计模式之iterator模式到STL中iterator迭代器

设计模式之iterator模式到STL中iterator迭代器 近日看<设计模式:可复用面向对象软件的基础>一书中23种模式中就有iterator迭代模式,且篇幅颇大.机缘巧合.我在分析STL代码结构的时候,同样发现iterator迭代器,且占据相当大的地位. 从设计模式的角度来看iterator模式 ü     意图 提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露对象的内部表示.我想GOF 的意图这次说的很明白了,就是我想遍历一个聚合对象.但又隐藏内部实现.该怎么办呢?本模式主要