Iterator接口

1.遍历Collection的两种方式

① 使用迭代器Iterator
② foreach循环(或增强for循环)

2.java.utils包下定义的迭代器接口:Iterator
2.1说明:
	* Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。
	* GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。
2.2作用:

遍历集合Collectiton元素

2.3如何获取实例:

coll.iterator()返回一个迭代器实例

2.4遍历的代码实现:
Iterator iterator = coll.iterator();

//hasNext():判断是否还下一个元素
while(iterator.hasNext()){
    //next():  ①指针下移   ②将下移以后集合位置上的元素返回
    System.out.println(iterator.next());
}

注意:集合对象每次调用iterator()方法都得到一个新的迭代器对象,默认游标都在集 合的第一个元素之前 --》错误写法二原因

//错误写法一:跳着输出,并出现 NoSuchElementException 异常
while((iterator.next()) != null){
    System.out.println(iterator.next());
}
//错误写法二:死循环一直顺出第一个元素
while(coll.iterator().hasNext()){
    System.out.println(coll.iterator().next());
}
2.5图示说明:

在这里插入图片描述

2.6 remove()的使用:
  • 测试Iterator中的remove()
  • 如果还未调用next() 或 在上一次调用 next 方法之后已经调用了 remove 方法,再调用 remove 都会报IllegalStateException。
  • 内部定义了remove(),可以在遍历的时候,删除集合中的元素。此方法不同于集合直接调用remove()
@Test
public void test3(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        //删除集合中"Tom"
        Iterator iterator = coll.iterator();
        while (iterator.hasNext()){
        //            iterator.remove();//java.lang.IllegalStateException
            Object obj = iterator.next();
            if("Tom".equals(obj)){
                iterator.remove();
//                iterator.remove();//java.lang.IllegalStateException
}
}
//遍历集合
        iterator = coll.iterator();//上一个迭代器iterator已经指向集合末尾了,需要重新生成
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
	```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值