概述
在程序开发中,经常需要 遍历集合 中的所有元素。
针对这种需求,JAVA提供了接口java.util.Iterator。
由于Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为 迭代器。
作用
Iterable 与 Iterator 搭配使用,实现自定义集合
获取迭代器
想要遍历 Collection 集合,那么就要从 Collection 获取该迭代器,方法如下:
public Iterator iterator(): 获取迭代器
常用方法
public E next():返回迭代的下一个元素。public boolean hasNext():如果仍有元素可以迭代,则返回 true。remove():移除某个元素
例子
public class IteratorDemo {
public static void main(String[] args) {
// 使用多态方式 创建对象
Collection<String> coll = new ArrayList<String>();
// 添加元素到集合
coll.add("串串星人");
coll.add("吐槽星人");
coll.add("汪星人");
//遍历
//使用迭代器 遍历 每个集合对象都有自己的迭代器
Iterator<String> it = coll.iterator();
// 泛型指的是 迭代出 元素的数据类型
while(it.hasNext()){ //判断是否有迭代元素
String s = it.next();//获取迭代出的元素
System.out.println(s);
}
}
}
如果集合没有元素了,还继续使用迭代器的next方法,将会抛出 java.util.NoSuchElementException 异常。
例子
实现简单的 ArrayList
package itrable.简单ArrayList;
import java.util.Iterator;
public class MyArrayList<E> {
private Object[] data ;
private int index = 0;
public MyArrayList(int len) {
data = new Object[len];
}
public void add(E e){
data[index] = e;
++index;
}
public Iterator<E> getIt(){
return new It();
}
private class It implements Iterator<E> {
/**
* 初始位置
*/
private int pos = -1;
@Override
public boolean hasNext() {
// 下一个位置,小于数组长度,就认为有下一个
return pos + 1 < data.length;
}
@Override
public E next() {
++pos;
E ret = (E)data[pos];
return ret;
}
}
}
测试类
public class Test {
public static void main(String[] args) {
MyArrayList list = new MyArrayList(4);
list.add("李雷");
list.add("韩梅梅");
list.add("lucy");
list.add("lili");
Iterator it = list.getIt();
while(it.hasNext()){
System.out.println(it.next());
}
}
}