Java 迭代器Iterator
迭代器Iterator是一种设计模式,可以使序列类型的数据结构的遍历与被遍历的对象分离,我们无需关系该序列的底层结构是什么。只要拿到对象,就可以用迭代器对对象内部的元素进行遍历。如对集合ArrayList和HashSet迭代。
Iterable 实现这个接口的集合对象是可以进行迭代的。IIterable 有一个默认的方法forEach进行遍历操作。
Iterator 迭代器提供迭代的对象,具体如何迭代时这个接口规范的。
- Iterator 接口包含三个方法:
- 1.hasNext():如果仍有元素可以迭代,返回true
- 2.next():返回迭代的下一个元素的值
- 3.remove():将迭代器返回的元素删除,一般很少用到。
注意:Iterator类位于java.util 包中,使用时需要引入:import java.util.Iterator;
在任意可迭代的集合数据类型中都必须实现:
1.集合数据类型必须实现一个iterator()方法并返回一个Iterator对象
2.Iterator类必须包含两个方法:hasNext()和next()
如果让一个类可迭代,第一步就是在它的声明中加入implements Iterable,然后在类中添加一个方法iterator()并返回一个迭代器Iterator,如下面代码
import java.util.Iterator;
import java.util.NoSuchElementException;
public class ResizingArrayStack<Item> implements Iterable<Item> {
....
....
....
//在类中添加一个方法iterator()并返回一个迭代器Iterator<Item>
public Iterator<Item> iterator(){
return new ReverseArrayIterator();
}
private class ReverseArrayIterator implements Iterator<Item>{
private int i;
public ReverseArrayIterator(){
i=n-1;
}
public boolean hasNext(){
return i>=0;
}
public void remove(){
throw new UnsupportedOperationException();
}
public Item next(){
if(!hasNext()) throw new NoSuchElementException();
return a[i--];
}
}
//迭代器实例
// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(12);
numbers.add(8);
numbers.add(2);
numbers.add(23);
Iterator<Integer> it = numbers.iterator();
while(it.hasNext()) {
Integer i = it.next();
if(i < 10) {
it.remove(); // 删除小于 10 的元素
}
}
System.out.println(numbers);
}
}
/*
*out: [12, 23]
*/