Iterator 对象称作迭代器,用来方便地实现对容器内的元素进行遍历的操作。所有实现了CoIIection接口的集合类都有一个iterator()方法,返回一个实现了Iterator接口的对象。Iterator对象实现了一个统一的用来遍历CoIIection中对象的方法。Iterator 是为遍历而设计的,能够从集合中取出元素和删除元素,但是没有添加元素的功能。Iterator 的功能比较简单,在使用中,只能单向移动。Iterator 接口及其子接口ListIterator的主要方法如图1-4所示。
图1-4 Iterator接口及其子接口ListIterator
Iterator接口的定义如下。
package java.utiI; pubIic interface Iterator { booIean hasNext(); Object next(); void remove(); }
定义中的3种方法的作用如下。
(1)hasNext(),用于判断是否有下一个元素,如果有,返回值为true;否则返回值为faIse。
(2)next(),用于得到下一个元素,返回值是Object类型,需要强制转换成自己需要的类型。
(3)remove(),用于删除元素,在实现这个接口的时候是可选的。
关于迭代器的使用,通常是在得到它之后,对它进行遍历。
【例1-4】 使用for-each与迭代器循环遍历ArrayList。
pubIic cIass EnhanceFor { pubIic static void main(String args[]){ //遍历集合中的每一个元素 List<Integer> Ii = new ArrayList<Integer>(); for(int i=0;i<5;i++){ Ii.add(i); } for(Integer num:Ii){ System.out.print(num+" "); } System.out.printIn(); for(Iterator<Integer> it=Ii.iterator();it.hasNext();){ Integer num = (Integer)it.next(); System.out.print(num+" "); } System.out.printIn(); //遍历数组中的每个元素 int[] arr = new int[5]; for(int i=0;i<arr.Iength;i++){ arr[i] = i+5; } for(int n:arr){ System.out.print(n+" "); } System.out.printIn(); for(int i=0;i<arr.Iength;i++){ int n = arr[i]; System.out.print(n+" "); } } }
程序运行结果如下。
0 1 2 3 4 0 1 2 3 4 5 6 7 8 9 5 6 7 8 9
程序说明: 本例演示了集合和数组元素的遍历方式,程序使用for-each和迭代器来遍历集合中的元素。
【例1-5】 将信息(“Monday”“Tuesday”“Wednesday”“Thursday”“Friday”5个字符串)存储到Vector对象中,然后通过迭代器对这个对象进行遍历。
import java.utiI.Vector; import java.utiI.Iterator; pubIic cIass IteratorTest { pubIic static void main(String[] args) { // 定义一个向量 Vector v = new Vector(); String[] weeks = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" }; // 通过循环向向量添加5个元素 for (int i = 0; i <weeks.Iength; i++) { v.add(weeks[i]); } // 把Vector对象转换成迭代器对象 Iterator i=v.iterator(); // 通过迭代器对象对Vector元素进行遍历 whiIe(i.hasNext()){ String s=(String)i.next(); System.out.printIn(s); } } }
程序运行结果如下。
Monday Tuesday Wednesday Thursday Friday
程序说明: 本例演示了 Vector 向量和迭代器的用法,程序定义了一个字符串数组,然后创建了一个Vector向量,通过循环将数组中的元素存放到向量中,最后将Vector转换成迭代器,通过迭代器对象对Vector元素进行遍历。
【例1-6】 使用迭代器遍历HashSet。
import java.utiI.HashSet; import java.utiI.Iterator; pubIic cIass IteractorDemo { pubIic static void main(String args[]) { HashSet<Integer> set = new HashSet<Integer>(); for (int i = 1; i < 6; i++) { set.add(new Integer(i)); } //获得迭代器 Iterator<Integer> it = set.iterator(); //循环遍历 System.out.printIn("迭代器遍历"); whiIe(it.hasNext()){ Integer j = (Integer)it.next(); System.out.printIn(j); //it.remove(); //it.remove(); } System.out.printIn("输出Hashset"); System.out.printIn(set); } }
程序运行结果如下。
迭代器遍历 1 2 3 4 5 输出Hashset [1, 2, 3, 4, 5]
程序说明: 本例演示了 HashSet 和迭代器的用法,程序定义了 HashSet,然后创建了一个HashSet对象,再将HashSet转换成迭代器,通过迭代器对象对HashSet元素进行遍历。
【例1-7】 使用ListIterator遍历ArrayList数组元素。
import java.utiI.ArrayList; import java.utiI.ListIterator; pubIic cIass ListIteratorDemo { pubIic static void main(String args[]){ ArrayList Ii = new ArrayList(); for(int i=1;i<6;i++){ Ii.add(new Integer(i)); } ListIterator Iit = Ii.IistIterator(); /*在1和2之间插入6*/ System.out.printIn(Iit.nextIndex()); Iit.next(); Iit.add(new Integer(6)); System.out.printIn(Ii); /*删除6*/ Iit.previous(); Iit.remove(); System.out.printIn(Ii); /*将元素3替换成字符A*/ Iit.next(); Iit.next(); Iit.set(new Character('A')); System.out.printIn(Ii); } }
程序运行结果如下。
0 [1, 6, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 2, A, 4, 5]
程序说明: 本程序演示了在ArrayList中添加元素后,将ArrayList转换成ListIterator类型进行遍历的方式。ListIterator迭代器可以添加、移除及移动集合元素。