集合遍历之迭代器

/*
 * 迭代
 * 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中的所有抽象方法

猜你喜欢

转载自blog.csdn.net/qq_34788903/article/details/80674852