Iterator能够将遍历序列的操作与底层序列的结构分离,迭代器统一了对容器的访问方式。
package chapter11;
//import java.util.Iterator;
import java.util.*;
public class testIterator {
public static void display(Iterator<Gerbil> it) {
while(it.hasNext()) {
Gerbil g =it.next();
System.out.println(g.getid()+":"+g+" ");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Gerbil> g = Arrays.asList(new Gerbil("a"),new Gerbil("b"),new Gerbil("c"));
/*Gerbil a = new Gerbil("a");
Gerbil b = new Gerbil("b");
Gerbil c = new Gerbil("c");
g.add(a);
g.add(b);
g.add(c);*/
display(g.iterator());
}
}
class Gerbil{
private static int i;
private final int counter=i++;
private String name;
public int getid() {
return counter;
}
public Gerbil(String s) {
this.name=s;
}
public String toString() {
return name;
}
}
List<Gerbil> g = Arrays.asList(new Gerbil("a"),new Gerbil("b"),new Gerbil("c"));
这行代码用了Arrays类中的asList()方法返回了一个List对象。
也可以用另一种方法来实现
ArrayList<Rent> arr = new ArrayList<Rent>();
Rent x = new Rent("x",1);
Mouse y = new Mouse("y",2);
Gerbila z = new Gerbila("z",3);
arr.add(x);
arr.add(y);
arr.add(z);
先新建一个ArrayList 在ArrayList中add三个对象
代码中的display()方法不包含任何有关它遍历的序列的类型信息
Java中的Iterator功能比较简单,并且只能单向移动:
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
JAVA编程思想155页例题用iterator来变历访问Rent
package chapter11;
import java.util.*;
public class testIteratorRent {
public static void display(Iterator<Rent> it) {
while(it.hasNext()) {
Rent e = it.next();
System.out.print(e+" ");
}
System.out.println();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Rent> arr = new ArrayList<Rent>();
Rent x = new Rent("x",1);
Mouse y = new Mouse("y",2);
Gerbila z = new Gerbila("z",3);
arr.add(x);
arr.add(y);
arr.add(z);
display(arr.iterator());
}
}
class Rent{
private String name;
private int age;
public Rent(String na,int in) {
setName(na);
setAge(in);
}
public String toString() {
return name+" "+age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String s) {
this.name=s;
}
public void setAge(int i) {
this.age=i;
}
}
class Mouse extends Rent{
//private String name;
//private int age;
public Mouse(String s,int i) {
super(s,i);
}
public String toString() {
return getName()+" "+getAge();
}
}
class Gerbila extends Rent{
public Gerbila(String n,int i){
super(n,i);
}
public String toString() {
return getName()+" "+getAge();
}
}