【Java杂谈】Iterator(迭代器)的使用

🎸Iterator是什么?

  • 迭代器是Java提供的一种访问集合的方法,Iterator 是 Java 迭代器最简单的实现,常用来访问ArrayList、HashMap等类的对象。

  • Iterator是一个接口,ListIterator是Collection API中的接口,它扩展了Iterator接口:

package java.util;

public interface ListIterator<E> extends Iterator<E> {
 
    boolean hasNext();

    E next();

    boolean hasPrevious();

    E previous();

    int nextIndex();

    int previousIndex();

    // Modification Operations

    void remove();

    void set(E e);

    void add(E e);
}

🎹Iterator的基本操作

🚀获取迭代器

可以使用iterator() 方法:

List<Integer> list  = new ArrayList<>();
//获取list的iterator
Iterator<Integer> listIterator = list.iterator();

🚀iterator遍历集合

while(listIterator.hasNext()){
    System.out.println(listIterator.next());
}

hasNext()方法的作用是没有遍历完成

next()方法有两个作用:1.返回迭代器当前位置结果2.返回结果后让迭代器继续遍历下一位置元素

🚀使用iterator删除元素

示例:

List<Integer> list  = new ArrayList<>();

        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        //获取list的iterator
        Iterator<Integer> listIterator = list.iterator();

        while(listIterator.hasNext()){
            if(listIterator.next()<3) {
                listIterator.remove();
            }
        }
        System.out.println(list);

🎺 增强for循环

在java中常常见到这样一种循环:

List<Integer> list  = new ArrayList<>();
for (Integer i : list) {
    // 相应操作
}

称其为增强for循环,反编译class文件结果如下:

List<Integer> list = new ArrayList();
Integer var3;
for(Iterator var2 = list.iterator(); var2.hasNext(); var3 = (Integer)var2.next()) {
}

可见增强for循环实际上也是使用iterator实现的

🎻注意事项

在使用iterator遍历集合,若对集合内元素进项删除操作,需要注意这样一个问题:

List<Integer> list  = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);

Iterator<Integer> it = list.iterator();
    while (it.hasNext()) {
    int i = it.next();
    if(i%2 ==0){
        list.remove(i);
    }
}
System.out.println(list);

当运行上述代码时,会出现异常:

这是因为当边使用迭代器对list进行遍历,边使用remove()删除,导致当使用remove()删除时,迭代器指向元素发生变化,造成“对象的并发修改”的问题,解决这一问题,可以使用iterator接口提供的iterator.remove()删除对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值