Iterator迭代器接口

本文深入探讨Iterator迭代器的工作原理,解析其内部的hasNext()和next()方法,阐述如何通过迭代器遍历并操作集合元素,同时强调在遍历过程中删除元素的正确方式以及相关注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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());
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值