前言:标题既然这么说,就证明它的确坑了我一把。在平时习惯使用了普通的for循环。所以在写遍历的时候也是经常使用这种。然而一味的使用它,给我带来了麻烦。项目开发中,有一个需求是插入多,读少的需求。想着这不是LinkedList的特性吗,就果断的使用了它。然而不久,同事反馈这个业务在读取时,时间特别长。开始想本来LinkedList读就慢嘛,后来一个公司一个大佬看见了我这部分的代码,这个地方慢的另外一个原因是因为我使用了普通的for循环。应该使用for增强形式。

这里小编提一个疑问哈:“java中哪些数据类型可以用于增强for循环”?这是在群里看见的一个面试题,网上没有找到答案,我认为是基本类型和引用类型都可以,还有就是实现了Iterable接口的,比如集合。有知道答案的可以在下面评论下。不胜感激。

步入正题:首先看下在数组中有什么差异

未编译代码,也就是我们程序员写的

使用jad查看反编译代码

jad命令

jad反编译代码

从反编译代码中,可以看出数组中没有什么差别。基本一致。只不过for增强写法上简单明了些。性能上没有什么差别。

在看下在集合中有什么差异

未编译代码集合

jad反编译代码

可以看得出普通for和for增强使用了2种不一样的方式实现,那么那个性能更好呢。

arraylist测试

测试了几次,发现执行时间差不多,并且普通for还比for增强快了些。那在看看LinkedList

LinkedList测试

性能上立马体现出来了。普通for慢很多。看过arraylist和LinkedList源码的肯定知道八九不离十了。我这里就说下结论:需要循环数组结构的数据时,建议使用普通for循环,因为for循环采用下标访问,需要循环链表结构的数据时,一定不要使用普通for循环,这种做法很糟糕,数据量大的时候有可能会导致系统崩溃。

那for增强有没有什么缺点呢,肯定是有的,上面的代码中for增强最终会变成Iterator遍历。Iterator的缺点也就是它的缺点了。如在迭代的过程中,除了使用迭代器(如:Iterator.remove()方法)对集合增删元素外,是不允许直接对集合进行增删操作。否则将会抛出 ConcurrentModificationException异常。

for增强缺点

总结:

无论是在数组中还是在集合中,加强型for循环都是它们各自的普通for循环的一种“简写方式”,即两者意思上是等价的,但前者方便简单,建议多使用。for增强不能完全代替普通for循环,因为for增强有一定的局限性。(如数组中不能替换相应索引下的值;集合中不能对集合进行增删操作、也不能获取索引)for增强只能用于数组、Iterable类型(包括集合)。集合中的for增强本质上使用了Ierator迭代器,所以要注意Itrator迭代陷阱。

增强型的for循环linkedlist_LinkedList给我深深的上了节for增强的课相关推荐

  1. 增强型的for循环linkedlist_LinkedList的复习

    先摘选一段 @Testpublic void test_LinkedList() { // 初始化100万数据 List list = new LinkedList(1000000);// 遍历求和i ...

  2. Java 增强型的for循环 for each

    For-Each循环 For-Each循环也叫增强型的for循环,或者叫foreach循环. For-Each循环是JDK5.0的新特性(其他新特性比如泛型.自动装箱等). For-Each循环的加入 ...

  3. 增强型的for循环linkedlist_38. 为什么千万别用for循环迭代LinkedList

    今天晚上7点时候,想着每天的8点健身还早,突然想起来以前的一个知识点说千万别用for循环迭代LinkedList,效率奇低,今天就想着来写个测试例子并分析原理: 代码测试与现象 哈哈哈,首先还是先上源 ...

  4. 增强型的for循环linkedlist_Java: 增强for循环针对list的时候,是严格按照list的顺序依次遍历的吗?...

    是的 首先写一个测试代码: ` private void for_Test(){ List list =new ArrayList<>(); list.add(1); list.add(2 ...

  5. for循环中取出最大最小 累加_从零开始学Python - 第006课:循环结构

    应用场景 我们在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景.例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令.在这个场景 ...

  6. 【C语言循环结构题目】在屏幕上打印n行*号倒三角形(此处n为6)

    [代码] #include <stdio.h>void print(int n) {int i, j , a, b = 2 * n - 1;int g, h ;if (n == 1){fo ...

  7. c语言流程图菱形代表什么_求一个输出菱形的c语言的流程图,“行”一个循环,然后把菱形分为上三角(四行的)和下三角(三行)...

    展开全部 学习C语言始终要记住"曙光在前头"和"千金难买回头e68a84e8a2ad62616964757a686964616f31333262376639看" ...

  8. 循环神经网络惊人的有效性(上)

    版权声明:本文智能单元首发,本人原创翻译,禁止未授权转载. 译者注:经知友推荐,将The Unreasonable Effectiveness of Recurrent Neural Networks ...

  9. c语言中内循环和外循环的位置可能产生性能上的区别

    ∇ \nabla ∇ 联系方式: e-mail: FesianXu@gmail.com QQ: 973926198 github: https://github.com/FesianXu 知乎专栏: ...

最新文章

  1. [转]Windows与VC命名规则
  2. 三种复位方式: 同步复位、异步复位、异步复位同步释放
  3. 【转】简单的java缓存实现
  4. 详解在group by分组查询中where 和 having的用法和区别。
  5. zabbix监控防火墙和交换机
  6. mysql操作常见问题_MySQL:常见使用问题
  7. 算法与数据结构(part2)--Python内置类型性能分析
  8. 更改MyEclipse的默认编码
  9. FRR BGP协议分析14 -- 静态路由的处理流程
  10. 距7月30日PMP考试不足10天,应该做点什么?
  11. nero 2015 installing
  12. 分享一个奇葩SM2258XT板子(100-H00112581-590)没有CE跳线,只有CE飞线,顺便量产开卡
  13. 查看Oracle执行计划的几种常用方法-系列1
  14. 【PHP8入门指南】基础语法与变量
  15. 用环状天线测向电压表鉴相器电路定位的无线电测向仪
  16. 构建分布式系统——技术考量
  17. 扫雷小游戏最详细讲解【C语言】
  18. 第21节--非线性回归(下)
  19. 可编辑表格TableCell
  20. 浙江省2021年高新技术企业认定补贴奖励查询及优惠政策,国高达60万

热门文章

  1. android 帧动画张数限制,Android帧动画和补间动画看这篇足够了
  2. 驱动开发:内核特征码扫描PE代码段
  3. 在WORD文档里面如何在最底部加入(第几页,共几页)
  4. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第43讲:PHP程序设计中的MVC模式
  5. ArcEngine导出为PDF中汉字乱码问题
  6. WPF添加加载动画遮罩
  7. 网页设计(前端)学习笔记
  8. matlab 符号的值,matlab solve 符号 转换为值
  9. A Survey of Large Language Models
  10. 运维管理软件中的精益思想