栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

迭代器Iterator简单理解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

迭代器Iterator简单理解

1 迭代器Iterator 1.1 什么是迭代器Iterator
  • Iterator是java的一个接口,核心的作用是遍历容器的元素,容器实现了Iterator接口,可以调用容器的iterator方法获取Iterator的对象
1.2 为什么是调用容器的Iterator方法
  • 原因是容器的实现方式有很多种,有着不同的遍历规则,例如hashset、arraylist、hashmap等,容器自己实现Iterator接口,开发人员就不用关心容器的遍历规则。
1.3 Iterator有3个核心方法

boolean hasNext()

  • 判断容器里边是否有下一个元素,有则返回true,无则返回fasle;
    void next()
  • 打印集合的下一个元素,指针往下一个节点后移动;
    void remove()
  • 删除指针的上一个元素;

    *遍历其中容器的元素,删除张三元素
import java.util.ArrayList;
import java.util.Iterator;

public class Test10 {
    public static void main(String[] args) {
        //建立一个容器
        ArrayList arrayList=new ArrayList();
        arrayList.add("张三");
        arrayList.add("李四");
        arrayList.add("王五");
        arrayList.add("政帅");
        arrayList.add("曾帅");
        //获取iterator对象
        Iterator iterator = arrayList.iterator();
        while (iterator.hasNext()){
            String next=iterator.next();
            if(next.equals("张三")){
                iterator.remove();
            }
            System.out.println(next);
        }
        System.out.println("======================");
        System.out.println(arrayList);
    }
}
1.4 Iterator使用的注意事项 1.4.1 Iterator的remove方法
  • 使用Iterator的remove()方法的时候先调用next方法不然会抛错IllegalStateException
import java.util.ArrayList;
import java.util.Iterator;

public class Test11 {
    public static void main(String[] args) {
        //建立一个容器
        ArrayList arrayList=new ArrayList();
        arrayList.add("张三");
        arrayList.add("李四");
        arrayList.add("王五");
        arrayList.add("政帅");
        arrayList.add("曾帅");
        //获取iterator对象
        Iterator iterator = arrayList.iterator();
        iterator.remove();

    }
}

  • 使用Iterator遍历元素的时候,不允许使用collection的remove方法来移除元素,原因是Iterator遍历元素时不允许其他线程进行修改元素,不然会抛错ConcurrentModificationException
import java.util.ArrayList;
import java.util.Iterator;

public class Test12 {
    public static void main(String[] args) {
        //建立一个容器
        ArrayList arrayList=new ArrayList();
        arrayList.add("张三");
        arrayList.add("李四");
        arrayList.add("王五");
        arrayList.add("政帅");
        arrayList.add("曾帅");
        //获取iterator对象
        Iterator iterator = arrayList.iterator();
        while (iterator.hasNext()){
            String next=iterator.next();
            if(next.equals("张三")){
                //使用collection方法增加元素
                arrayList.add("王武");
            }
            System.out.println(next);
        }
        System.out.println("======================");
        System.out.println(arrayList);
        

    }
}
1.4.2 Iterator遍历元素只能调用1次next()方法
  • 从源码得知每一次调用next的方法cursor下标都会增加1 如果在遍历调用2次就会大于容器的size 就会抛错NoSuchElementException
import java.util.ArrayList;
import java.util.Iterator;

public class Test10 {
    public static void main(String[] args) {
        //建立一个容器
        ArrayList arrayList=new ArrayList();
        arrayList.add("张三");
        arrayList.add("李四");
        arrayList.add("王五");
        arrayList.add("政帅");
        arrayList.add("曾帅");
        //获取iterator对象
        Iterator iterator = arrayList.iterator();
        while (iterator.hasNext()){

            if(iterator.next().equals("张三")){
                iterator.remove();
            }
            System.out.println(iterator.next());
        }
        System.out.println("======================");
        System.out.println(arrayList);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/970533.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号