潜水阿宝 2023-02-01 11:20 采纳率: 57.1%
浏览 22
已结题

Java中的对集合便利的方式有区别吗

问题遇到的现象和发生背景

在学习mybatis遍历结果的时候,突然想起有好多种遍历方式,但是我本身并不清楚这些遍历的原理,很难理解他们之间的不同

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
 List<user> users=session.selectList("selectAll");
        for (user u : users) {
            System.out.println(u);
        }
        for (int i = 0; i < users.size(); i++) {
            user u =  users.get(i);
            System.out.println(u);
        }

运行结果及详细报错内容

这两种遍历结果都是一样的

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%

那么他们之间的区别是什么呢,使用场景有区分吗?

  • 写回答

3条回答 默认 最新

  • 於黾 2023-02-01 11:37
    关注

    第一种方式,增强for循环,底层使用的是迭代器
    这种方式的好处是,不需要一个额外的循环变量,而且代码精简,可读性强
    但是在遍历过程中不可以修改集合的长度,会造成遍历出错
    还有,如果你有两个一样长度的集合需要一起遍历,这种方式也没办法
    最后,你想在遍历过程中直接修改集合里的值,也不行,因为取出来的只是拷贝,除非里面放的都是引用类型
    第二种方式是传统for循环,i作为下标
    好处就是可以正向遍历,可以反向遍历,可以同时遍历多个集合,也可以通过下标修改原始值
    灵活性非常高
    坏处就是代码要多一些,不小心容易造成索引越界

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 创建了问题 2月1日

悬赏问题

  • ¥15 关于#爬虫#的问题:请问HMDB代谢物爬虫的那个工具可以提供一下吗
  • ¥15 vue3+electron打包获取本地视频属性,文件夹里面有ffprobe.exe 文件还会报错这是什么原因呢?
  • ¥20 用51单片机控制急停。
  • ¥15 孟德尔随机化结果不一致
  • ¥15 在使用pyecharts时出现问题
  • ¥15 深度学习残差模块模型
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据