/*
* 迭代
* A:迭代器的概述
* 集合是用来存储元素的,存储的元素需要查看,那么就需要迭代
* 迭代
* A:迭代器的概述
* 集合是用来存储元素的,存储的元素需要查看,那么就需要迭代
* */
package com.geima.conlection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import com.heima.bean.Student;
public class demo5_iterator {
/*
* 迭代
* A:迭代器的概述
* 集合是用来存储元素的,存储的元素需要查看,那么就需要迭代
* */
public static void main(String[] args) {
//demo1(); 对Java写好的 类的迭代,那么对自己写的类应该如何迭代呢
Collection c=new ArrayList();
c.add(new Student("zhang",23));
c.add(new Student("add",22));
Iterator it=c.iterator();
while(it.hasNext()){
System.out.println(it.next());
Student s =(Student)it.next();//父类引用不能使用子类对象方法,需要向下转型
System.out.println(s.getName()+"..."+s.getAge());
}
}
private static void demo1() {
Collection c=new ArrayList();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
//对集合中的元素迭代遍历
Iterator it=c.iterator();//获取了it迭代器
// boolean b1=it.hasNext();//判断集合中是否有元素,有就返回true
// Object obj1=it.next();
// System.out.println(b1);//true
System.out.println(obj1);//a
//
// boolean b2=it.hasNext();//判断集合中是否有元素,有就返回true
// Object obj2=it.next();
// System.out.println(b2);//true
// System.out.println(obj2);//b..但是这样写太墨迹了,可以用while来解决
while(it.hasNext()){
System.out.println(it.next());
}
}
}
迭代器原理及代码解析
A:迭代器原理
迭代器是对集合进行遍历,而每一个集合内部的存储结构是相同的,所以每一个集合的存和取是不一样的,那么就需要在每一个类中定义一个hasNext()和Next()方法,但是这会让整个集合体系过于臃肿。迭代器是将这些方法向上抽取出接口,然后在每个类的内部,定义自己的迭代方式,这样的好处有二。第一是规定了整个集合体系的便利方式都是hasNext()和Next()方法,第二就是代码有底层内部实现,使用者不用管怎么实现,会用即可。
B:迭代器源码解析
在eclipse中ctrl+shift+t找到ArrayLIst类
ctrl+o查找iterator()方法
查看返回值类型是new Itr(),说明Itr这个类i实现了Iterator接口
查找Itr这个内部类,发现重写了Iterator中的所有抽象方法