Java集合框架——迭代器

给你一囗甜甜゛ 提交于 2020-02-06 02:46:26

迭代器

一、查看迭代器源码

  • 按住Ctrl键将鼠标放在ArrayList上,并点击Open Implementation(实现)
    在这里插入图片描述
  • 在右侧outline列表里找到 iterator() 方法
    在这里插入图片描述
  • 按住Ctrl键将鼠标放在Itr上,并点击Open Declaration(声明)
    在这里插入图片描述
  • 可以发现Itr是ArrayList的一个内部类
    在这里插入图片描述
    二、迭代器的源码分析
  • 通过观察源码,发现迭代器对象是当前集合的内部类创建的对象,并且这个内部类实现了Iterator接口
  • 把迭代器定义成内部类的原因:每一个种类的集合的数据结构是不一样的,遍历的过程也是不一样的,所以要根据当前集合的情况定义一个迭代器类,而不能为所有集合定义一个统一的迭代器类

三、案例实操:遍历学生对象集合

  • 用集合存储5个学生对象,并遍历该集合
  • 分析:
  • ①定义学生类
  • ②创建集合
  • ③创建学生对象,并添加到集合
  • ④遍历:toArray,iterator
//Student.java
package com.collection.demo2;

public class Student {
	private String name;
	private int age;
	
	public Student(String name, int i) {
		super();
		this.name = name;
		this.age = i;
	}
	
	public Student() {
		super();
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

//CollectionTest2.java
package com.collection.demo2;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionTest2 {
	@SuppressWarnings("all")
	public static void main(String[] args) {
		Collection c = new ArrayList();
		
		//创建学生对象
		Student s1 = new Student("wu", 17);
		Student s2 = new Student("wang", 18);
		Student s3 = new Student("zhang", 19);
		Student s4 = new Student("liu", 20);
		Student s5 = new Student("zheng", 21);
		
		//添加学生对象到集合
		c.add(s1);
		c.add(s2);
		c.add(s3);
		c.add(s4);
		c.add(s5);
		
		//遍历
		//方法一:toArray
//		Object[] array = c.toArray();
//		for (int i = 0; i < array.length; i++) {
//			Student s = (Student)array[i];
//			System.out.print("name:" + s.getName() + "  ");
//			System.out.println("age:" + s.getAge());
//		}
		
		//方法二:iterator
		Iterator iterator = c.iterator();
		while(iterator.hasNext()) {
			Object next = iterator.next();
			Student s = (Student)next;
			System.out.print("name:" + s.getName() + "  ");
			System.out.println("age:" + s.getAge());
		}
	}
}

执行结果:
在这里插入图片描述
四、迭代器对象的使用注意事项
在这里插入图片描述

  • 方法二中,若单次while循环中出现两次iterator.next(),迭代器的游标将移动两次,从而导致报错
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!