这一章节我们来讨论一些迭代器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<Integer> collection) {
Iterator<Integer> it = collection.iterator();
while (it.hasNext()) {
int rtn = it.next();
System.out.println(rtn);
}
}
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
HashSet<Integer> set = new HashSet<Integer>();
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<Person> collection) {
Iterator<Person> it = collection.iterator();
while (it.hasNext()) {
Person person = it.next();
System.out.println(person.getId());
}
}
public static void main(String[] args) {
ArrayList<Person> list = new ArrayList<Person>();
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<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
Iterator<Integer> iterator = list.iterator();
iterator.next();// 如果我们注释了这一句,运行时就会抛异常
iterator.remove();
}
}
当我们使用remove方法的时候,必须先使用next方法,使得迭代器里面已经指向一个新的对象。
总结:这一章节简单讨论了迭代器的概念,以及相应的注意点。
这一章节就到这里,谢谢。
-----------------------------------