迭代器
一、查看迭代器源码
- 按住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(),迭代器的游标将移动两次,从而导致报错
来源:CSDN
作者:Kingdom_CCC
链接:https://blog.csdn.net/weixin_43796325/article/details/104172466