这一章节我们来讨论一些迭代器Iterator。

1.概念

迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容。

 

package com.ray.ch09;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class Test {

	public static void Traversal(Collection collection) {
		Iterator it = collection.iterator();
		while (it.hasNext()) {
			int rtn = it.next();
			System.out.println(rtn);
		}
	}

	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		for (int i = 0; i < 10; i++) {
			list.add(i);
		}
		HashSet set = new HashSet();
		for (int i = 0; i < 10; i++) {
			set.add(i);
		}
		System.out.println(---------list---------);
		Traversal(list);
		System.out.println(---------set---------);
		Traversal(set);
	}
}

从上面的代码可以看见,使用迭代器,不管是list还是set,都可以重复使用Traversal这个方法,这样使得代码重用性得到提高。

 

2.注意点

(1)我们只需要接收容器,即可以在每个对象上面操作

 

package com.ray.ch09;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Test {

	public static void Traversal(Collection collection) {
		Iterator it = collection.iterator();
		while (it.hasNext()) {
			Person person = it.next();
			System.out.println(person.getId());
		}
	}

	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		for (int i = 0; i < 10; i++) {
			Person person = new Person();
			person.setId(i);
			list.add(person);
		}
		Traversal(list);
	}
}

class Person {
	private int id = 0;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
}

从上面的代码可以看见,我们可以通过迭代器类型的转换,转换成Person类型,然后持有了Person这个对象的引用,那么现在就可以对person对象进行操作。

 

 

(2)remove()方法的使用

 

package com.ray.ch09;

import java.util.ArrayList;
import java.util.Iterator;

public class Test {

	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		for (int i = 0; i < 10; i++) {
			list.add(i);
		}
		Iterator iterator = list.iterator();
		iterator.next();// 如果我们注释了这一句,运行时就会抛异常
		iterator.remove();
	}
}

当我们使用remove方法的时候,必须先使用next方法,使得迭代器里面已经指向一个新的对象。

 

 

总结:这一章节简单讨论了迭代器的概念,以及相应的注意点。