一、迭代器的获取与使用
通过调用集合中的迭代器方法iterator(),可以获取操作集合的迭代器对象。
1、方法
//如果仍有元素可以迭代,返回true
boolean hasNext()
//返回迭代的下一个元素
E next()
//从迭代器指向的collection中移除迭代器返回的最后一个元素
void remove()
2、使用
public class IteratorDemo {
public static void main(String[] args) {
Collection coll = new ArrayList();
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
coll.add("abc4");
// 方法一:while循环取出集合中的元素
Iterator it = coll.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// 方法二:for循环取出集合中的元素
for (Iterator it1 = coll.iterator(); it.hasNext();) {
System.out.println(it1.next());
}
}
}
for循环与while循环的区别:
(1)for循环在迭代过后,指向集合的指针无法继续使用;while循环在迭代之后,指向集合的指针还能继续使用。
(2)为了节省内存,开发的时候尽量采用for循环。
二、迭代器的原理
每一个容器都有自己特定的迭代器,迭代器就是实现了Iterator接口的私有内部类。
(1)内部类实现了Iterator接口,重写了hasNext()与next()方法
(2)外部类通过调用iterator()方法获取内部内的对象,通过该对象对集合中的元素进行操作。
注意:
(1)为什么定义成内部类?
该类操作的是容器中的数据。
该类必须依赖于具体的容器,因为每一个容器的数据结构都不相同,所以该迭代器类是在容器内部实现的。
(2)内部类的使用场所
一个事务如果直接访问另外一个事务里面的成员,通过内部类来实现。如果通过外部类来实现,则操作另一个类中的元素不方便,必须要创建另一个类的对象、调用另一个类的方法才能操作。