Iterator 仅用于遍历集合,Iterator本身并不提供承装对象的能力。如果需要创建Iterator 对象,则必须有一个被迭代的集合。
集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
常见方法来遍历Collection
集合元素的遍历操作,使用迭代器Iterator接口
内部的方法:hasNext()和 next()
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorTest {
@Test
public void test(){
Collection collection = new ArrayList();
collection.add(111);
collection.add(222);
collection.add(new Person("张三",18));
collection.add(new String("李四"));
collection.add(false);
Iterator iterator = collection.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
迭代器Iterator的执行原理
(1) 首先要创建一个指针对象,指向当前结构的起始位置,也就是说,遍历器本质上是一个指针对象。
(2) 第一次调用指针对象的next 方法 可以将指针指向数据结构的第一个成员。
(3) 第二次调用指针对象的next方法 指针对象将指向数据结构的第二个成员。
(4) 通过在运行过程中不断调用指针对象的next方法, 直到它指向数据结构的结束位置,每一次调用next方法,都会返回数据结构的当前成员信息,具体来说就是返回一个包含value和boolean两个属性的对象其中value是当前成员的值,还有一个布尔值用来判断遍历是否结束。
集合元素的遍历操作,使用迭代器Iterator接口
1.内部的方法:hasNext()和 next()
2.集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
3.内部定义了remove(),可以在遍历的时候,删除集合中的元素。此方法不同于集合直接调用remove()
注意:
- Iterator可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove方法,不是集合对象的remove方法。
- 如果还未调用next()或在上一次调用next方法之后已经调用了remove方法,再调用remove都会报IllegalStateException。
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorTest {
//测试Iterator中的remove()方法
@Test
public void test3(){
Collection collection = new ArrayList();
collection.add(111);
collection.add(222);
collection.add(new Person("张三",18));
collection.add(new String("李四"));
collection.add(false);
//删除集合中”李四”
//如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法,
//再一次调用remove都会报IllegalStateException。
Iterator iterator = collection.iterator();
while(iterator.hasNext()){
// iterator.remove();
Object obj = iterator.next();
if("李四".equals(obj)){
iterator.remove();
// iterator.remove();
}
}
//遍历集合
iterator = collection.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}