迭代器
1.迭代器内部的设计
/*
并不是所有的集合都有索引,以前使用for+get方法(索引) 遍历集合的方式,就行不通了
jdk提供了一种遍历集合的通用方式(遍历集合的工具): 迭代器
迭代器接口: java.util.Iterator<E>
抽象方法:
public abstract boolean hasNext(): 判断是否具有下一个元素,有: true,没有: false
public abstract E next(): 获取下一个元素
public abstract void remove() : 删除一个元素
单列集合根接口java.util.Collection<E> 里面定义抽象方法,获取迭代器
抽象方法
public abstract Iterator<E> iterator() : 返回在此 collection 的元素上进行迭代的迭代器。
返回值类型: Iterator 是一个接口
java.util.ArrayList<E> 类 实现了Collection接口,必然覆盖重写抽象方法 iterator(),但是由于该方法的返回值类型,是Iterator接口类型,
所以ArrayList<E>类,在覆盖重写iterator()方法时,必须想办法,返回Iterator接口的实现类对象
public class ArrayList implement Collection {
//覆盖重写抽象方法
//...
public Iterator iterator() {
return new Itr();
}
//定义一个私有内部类实现Iterator接口
private class Itr implements Iterator {
//覆盖重写抽象方法
public boolean hasNext() {
//...
}
public E next() {
...
}
public void remove() {
...
}
}
}
*/
2.迭代器的基本使用
package jihe;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo01 {
public static void main(String[] args) {
Collection<Integer> coll = new ArrayList<Integer>();
coll.add(1000);
coll.add(2000);
coll.add(3000);
Iterator<Integer> iterator = coll.iterator();
while (iterator.hasNext()){
int num = iterator.next();
System.out.println(num);
}
}
}
3.迭代器的原理
4.存储自定义类型并遍历
package diedaiqi;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package diedaiqi;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo01 {
public static void main(String[] args) {
Collection<Student> coll = new ArrayList<>();
coll.add(new Student("张三",26));
coll.add(new Student("李四",20));
coll.add(new Student("王五",18));
Iterator<Student> it = coll.iterator();
while(it.hasNext()){
Student std = it.next();
System.out.println(std.toString());
}
}
}
5.foreach遍历集合
package diedaiqi;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class jihe {
public static void main(String[] args) {
Collection<Integer> coll = new ArrayList<>();
coll.add(100);
coll.add(200);
coll.add(300);
Iterator<Integer> it = coll.iterator();
for (int i: coll) {
System.out.println(i);
}
}
}