Iterator遍历集合
Iterator接口是Java集合框架中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器。
接下来通过一个案例来学习如何使用Iterator迭代集合中的元素,如文件1所示。
文件1 Example03.java
1 import java.util.ArrayList;
2 import java.util.Iterator;
3 public class Example03 {
4 public static void main(String[] args) {
5 // 创建ArrayList集合
6 ArrayList list = new ArrayList();
7 // 向该集合中添加字符串
8 list.add("data_1");
9 list.add("data_2");
10 list.add("data_3");
11 // 获取Iterator对象
12 Iterator iterator = list.iterator();
13 // 判断集合中是否存在下一个元素
14 while (iterator.hasNext()) {
15 Object obj = iterator.next(); // 取出ArrayList集合中的元素
16 System.out.println(obj);
17 }
18 }
19 }
运行结果如图1所示。
图1 运行结果
文件1演示的是Iterator遍历集合的整个过程。当遍历元素时,首先通过调用ArrayList集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。需要注意的是,在通过next()方法获取元素时,必须保证要获取的元素存在,否则,会抛出NoSuchElementException异常。
Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了让初学者能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程,如图2所示。
图2 遍历元素过程图
在图2中,在调用Iterator的next()方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next()方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next()方法时,迭代器的索引会指向第二个元素并将该元素返回,以此类推,直到hasNext()方法返回false,表示到达了集合的末尾终止对元素的遍历。