迭代器

11.Iterator iterator():返回在该集合的元素上进行迭代的迭代器,用于遍历该集合所有元素。

  • boolean hasNext()
  • E next()
  • void remove()
package com.first;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class HelloWorld {

    public static void main(String[] args) {

        Collection c1=new ArrayList();
        c1.add("a");
        c1.add("b");
        c1.add("c");
        c1.add("d");

        Iterator it=c1.iterator();
        boolean b1=it.hasNext(); //判断集合中是否有元素,有就返回true
        Object obj1=it.next();   //取出集合中的数据
        System.out.println(b1);
        System.out.println(obj1);

        boolean b2=it.hasNext();
        Object obj2=it.next();
        System.out.println(b2);
        System.out.println(obj2);

    }

}

运行结果为

true
a
true
b

上述代码可以简写为

package com.first;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class HelloWorld {

    public static void main(String[] args) {

        Collection c1=new ArrayList();
        c1.add("a");
        c1.add("b");
        c1.add("c");
        c1.add("d");

        Iterator it=c1.iterator();
        while (it.hasNext()) {
            Object obj=it.next();
            System.out.println(obj);
        }

    }

}

运行结果为

a
b
c
d

遍历元素的过程为

这里写图片描述

在遍历元素时,首先获得迭代器对象,然后用hasNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已达到了集合末尾,停止遍历元素。需要注意的是,在通过next()方法获取元素时,必须保证要获取的元素存在,否则,会抛出NoSuchElementException异常。

Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素。

在调用Iterator的next()方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next()方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next()方法时,迭代器的索引会指向第二个元素并将该元素返回,以此类推,直到haxNext()方法返回false,表示到达了集合的末尾,终止对元素的遍历。

通过迭代器获取集合中的元素时,都会将这些元素当做Object类型看待,如果想得到特定类型的元素,则需要进行强制类型转换。

虽然Iterator可以用来遍历集合中的元素,但写法上比较麻烦,为了简化书写,从JDK5.0开始,提供了foreach循环。foreach循环是一种更加简洁的for循环,其底层依赖迭代器。foreach循环用于遍历数组或集合中的元素,其具体语法如下。


for(容器中元素的类型 临时变量:容器变量){
  执行语句
}

for(Object obj:list){
  System.out.println(obj);
}
  • 当使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改。
  • 在使用Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象的remove()方法去删除元素,会出现异常。因为集合中删除了元素会导致迭代器预期的迭代次数发生改变,导致迭代器的结果不准确。可以用迭代器本身的remove()方法来解决这个问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值