以下迭代器只是以ArrayList中重写的为例;由于是学习笔记,对我而言有两个用途:一则帮助他人填充基础,二则是希望 若我笔记有误,有人能加以指正,不至于误入歧途;
1. 迭代器简介
- 所有实现了Collection的容器类都会有一个iterator方法 ,用来返回一个实现了Iterator接口的对象;
以ArrayList为例:以下是它的迭代器;
public Iterator<E> iterator() {
return new Itr();//这个就是那个返回,实现了Iterator接口的类对象;
}
//一个内部类,实现了Iterator接口;
private class Itr implements Iterator<E> {
//一个游标一样,开始指向-1,就是不存在;
int cursor; // index of next element to return
int lastRet = -1; // index of last element returned; -1 if no such
int expectedModCount = modCount;
Itr() {}
//一个判断是否继续循环的方法;
public boolean hasNext() {
return cursor != size;//如果元素的数量等于游标的值,则返回false,否则是true;
}
@SuppressWarnings("unchecked")
public E next() {
checkForComodification();
int i = cursor;
if (i >= size)//如果cursor的值大于元素的数量,就可以抛出异常;一般就结束了;
throw new NoSuchElementException();
//将动态数组中的值赋值给一个Object数组;
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
//每取值一次就使得游标cursor加一;
cursor = i + 1;
return (E) elementData[lastRet = i];
}
2. 使用一张简单图片表示迭代器对数据提取;
- hasNext():该方法主要用于进行一个判断,在cursor的值是否大于动态数组中已有的元素数量;
- next():该方法主要用于提取动态数组中的值;
- remove():该方法主要用于删除元素,但是它删除的是已经遍历过的元素;
public class TestIterator {
public static void main(String[] args) {
List<String> arr = new ArrayList<String>();//定义一个ArrayList动态数组
arr.add("dxs");
arr.add("神秘的天");
arr.add("一言躺");
Iterator<String> ite=arr.iterator();//定义一个迭代器;
while(ite.hasNext()) {//进行判断,是否游标后面还有元素;
System.out.println(ite.next());//输出迭代得到的元素;
}
for(;ite.hasNext();) {
System.out.println(ite.next());
}
}
}
以上基本就是迭代器的基本使用方法;