1,迭代器概述
-
集合是用来存储元素,存储的元素需要查看,那么就需要迭代(遍历)
【1】迭代器原理
-
迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,第二,代码有底层内部实现,使用者不用管怎么实现的,会用即可
【2】迭代器源码解析
-
在eclipse中ctrl + shift + t找到ArrayList类
-
ctrl+o查找iterator()方法
-
查看返回值类型是new Itr(),说明Itr这个类实现Iterator接口
-
查找Itr这个内部类,发现重写了Iterator中的所有抽象方法
2,常用方法
3, 迭代遍历使用
【1】
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo5_Iterator {
public static void main(String[] args) {
//demo1();
Collection c = new ArrayList();
c.add(new Student("张三",23));
c.add(new Student("李四",24));
c.add(new Student("王五",25));
c.add(new Student("赵六",26));
c.add(new Student("赵六",26));
for(Iterator it = c.iterator();it.hasNext();) {
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + "," + s.getAge()); //获取对象中的姓名和年龄
}
System.out.println("------------------------------");
Iterator it = c.iterator(); //获取迭代器
while(it.hasNext()) { //判断集合中是否有元素
//System.out.println(((Student)(it.next())).getName() + "," + ((Student)(it.next())).getAge());
Student s = (Student)it.next(); //向下转型
System.out.println(s.getName() + "," + s.getAge()); //获取对象中的姓名和年龄
}
}
public static void demo1() {
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
//对集合中的元素迭代(遍历)
Iterator it = c.iterator(); //获取迭代器
/*boolean b1 = it.hasNext(); //判断集合中是否有元素,有就返回true
Object obj1 = it.next();
System.out.println(b1);
System.out.println(obj1);
boolean b2 = it.hasNext(); //判断集合中是否有元素,有就返回true
Object obj2 = it.next();
System.out.println(b2);
System.out.println(obj2);*/
while(it.hasNext()) {
System.out.println(it.next());
}
}
}