当前位置: 首页 > article >正文

Java[list/set]通用遍历方法之Iterator

需求:输入一个字符串 将其拆解成单个汉字 然后一行一个输出
这里要求使用到Arraylist集合

实现方法+Itrator遍历的原理
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Main{
    public static void main(String[] args){
        String str = "我希望你可以好好生活";
        Collection<String> Astr = new ArrayList<>();
        for(int i=0;i<str.length(); i++){
            Astr.add(str.substring(i,i+1));
        }
        Iterator<String> it = Astr.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
}





//原始for遍历是用索引来进行遍历 但是现在我们的set集合里面是没有索引的
//所以原先的普通for遍历只能在list遍历中进行


//以下的三种遍历方法可以在list和set两种类型中去使用
//————————————————————————————————————————————————————————————
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Main{
    public static void main(String[] args){
        //原始for遍历是用索引来进行遍历 但是现在我们的set集合里面是没有索引的
        //所以原先的普通for遍历只能在list遍历中进行


        //以下的三种遍历方法可以在list和set两种类型中去使用
        //————————————————————————————————————————————————————————————
        //迭代器遍历:不依赖索引 在Java中的类 叫做Iterator 默认指向集合的0索引
        /*

         */
        String str = "这是一个迭代器案例分析语句";
        Collection<String> strc = new ArrayList<>();
        for(int i=0;i<str.length();i++){
            strc.add(str.substring(i,i+1));
        }
        Iterator<String> it = strc.iterator();//获取的迭代器指向零索引
        boolean flag = it.hasNext();//判断是否还有下个元素
        while(it.hasNext()){ //只要还有下一个元素 it.hasNext()判断为true 则while成立
            String istr = it.next();//指针指向某个元素并且暂时存储某个字符
            System.out.println(istr);//打印我们刚刚指向的这个字符
        }
        //现在我们正式来做一个迭代器的例子:
        //1.创建集合并且添加元素
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");
        //2.获取迭代器对象 迭代器好像一个箭头 默认指向集合的0索引处
        Iterator<String> It = coll.iterator();//右边很好理解,也就是coll这个类去调用Iterator的方法
        //3.我们利用循环去不断地获取集合中的每一个元素
        while(It.hasNext()){//这个不要理解为下一个元素 不要见名知意 本质上就是判断指针指向的当前元素
            //4.next方法的两件事情 获取元素并且移动指针
            String Str = it.next();
            System.out.println(str);
        }

        System.out.println(it.next());//这一句话就可以看到异常了 为什么?因为已经指向一个没有内容的集合序列区域了
        System.out.println(it.hasNext());//说明迭代器完成迭代后指针不会复位

        //如果我们希望继续第二次遍历结合 我们需要创建一个新的迭代器对象
        Iterator<String> it2 = coll.iterator();
        while(it2.hasNext()){  //注意:有一次hasNext 就只能有一次next方法 不然可能会报错
            String str2 = it.next();
            System.out.println(str);
        }
        //4.一些异常分析
        /*
        NoSuchElementException 说明我的指针指向了迭代器的最末端 不会复位的 比如"aaa" "bbb" "ccc" "ddd" 的序列依次是 0 1 2 3
        我产生这个异常通常是因为迭代器指针指向了4序列 这个序列上是不存在集合元素 因此会报错
        同时 我们需要知道 这个指针就只能放在原处了 它不会被移动 如果我们希望重新利用迭代器遍历一次这个集合 需要重新创建一个迭代器 如1.方法
        在循环当中 next方法只可以使用一次 但是你可以灵活地用变量来储存
        迭代器遍历的时候 不可以用集合的方法进行增加/删除(很重要的结论) 报错是ConcurrentModificationException!
        不过你虽然不能用coll.remove 但是你可以用it.remove 说白了就是在迭代器类型当中需要用迭代器来进行删除 而不是集合
         */





















        //————————————————————————————————————————————————————————————
        //增强for遍历
        //Lambda遍历
    }
}


http://www.kler.cn/a/147167.html

相关文章:

  • Java基础-I/O流
  • 51单片机应用开发---LCD1602显示应用
  • WEB服务器实现(药品商超)
  • 基于Python空气质量可视化及预测
  • MySQL中Flashback(闪回)技术
  • Pytest从入门到精通
  • C++之算术生成算法
  • 分享常用设计模式之单例模式(懒汉模式和饿汉模式)和几种关于设计模式的面试题
  • TDA4VM EVM开发板调试笔记
  • 移动机器人路径规划(二)--- 图搜索基础,Dijkstra,A*,JPS
  • c# statusStrip 显示电脑主机名、IP地址、MAC地址
  • vue day2
  • 【深度学习】如何找到最优学习率
  • Linux系统安装Docker-根据官方教程教程(以Ubuntu为例)
  • 数据结构 / 结构体指针
  • [每周一更]-(第74期):Docker-compose 部署Jenkins容器-英文版及错误纠错
  • taro h5 ios解决input不能自动获取焦点拉起键盘
  • YOLOv5轻量化改进之mobilenetv3,更换mobilenetv3中的注意力机制。
  • Windows 下安装MySQL8.0 Zip
  • 057-第三代软件开发-文件监视器
  • 2023信息技术应用创新论坛|云轴科技ZStack分享云原生超融合在智慧交通的应用
  • IDEA 2022.1 同一个 spring boot main类运行多个实例
  • 基于helm的方式在k8s集群中部署gitlab - 部署(一)
  • 2023华为ICT网络初赛试题回顾
  • 第四十三天|1049. 最后一块石头的重量 II 494. 目标和 474. 一和零
  • python每日一题——10合为k的子数组