什么是迭代器?
在Java中,有很多的数据容器,对于这些的操作有很多的共性。Java采用了迭代器来为各种容器提供了公共的操作接口(各个容器实现Iterable接口)。这样使得对容器的遍历操作与其具体的底层实现相隔离,达到解耦的效果。
Iterator在1.8中加入了forEachRemaining(Consumer action):使用Lambda表达式来遍历集合元素。
迭代器Iterator接口中三个常用的方法:
迭代器使用
public static void main(String[] args) {
List<String> list=new ArrayList<>();
list.add("111");
list.add("222");
list.add("333");
for(Iterator<String> it=list.iterator();it.hasNext();)
{
System.out.println(it.next());
}
}
打印结果:
111
222
333
我们来看一个Iterator的实现类
public class ArrayIterator implements Iterator<Object> {
private final Object array;
private int currentIndex = 0;
public ArrayIterator(Object array) {
if (!array.getClass().isArray()) {
throw new IllegalArgumentException("not an array");
}
this.array = array;
}
@Override
public boolean hasNext() {
return currentIndex < Array.getLength(array);
}
@Override
public Object next() {
return Array.get(array, currentIndex++);
}
@Override
public void remove() {
throw new UnsupportedOperationException("cannot remove items from an array");
}
}
hasNext()方法比较了数组容器的长度和当前位置的大小并返回一个布尔型值。
next()方法先将haxNext()方法中currentIndex位置的值取出,然后将位置向后移动一个。
网友评论