增强型的for循环linkedlist_LinkedList给我深深的上了节for增强的课
前言:标题既然这么说,就证明它的确坑了我一把。在平时习惯使用了普通的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增强的课相关推荐
- 增强型的for循环linkedlist_LinkedList的复习
先摘选一段 @Testpublic void test_LinkedList() { // 初始化100万数据 List list = new LinkedList(1000000);// 遍历求和i ...
- Java 增强型的for循环 for each
For-Each循环 For-Each循环也叫增强型的for循环,或者叫foreach循环. For-Each循环是JDK5.0的新特性(其他新特性比如泛型.自动装箱等). For-Each循环的加入 ...
- 增强型的for循环linkedlist_38. 为什么千万别用for循环迭代LinkedList
今天晚上7点时候,想着每天的8点健身还早,突然想起来以前的一个知识点说千万别用for循环迭代LinkedList,效率奇低,今天就想着来写个测试例子并分析原理: 代码测试与现象 哈哈哈,首先还是先上源 ...
- 增强型的for循环linkedlist_Java: 增强for循环针对list的时候,是严格按照list的顺序依次遍历的吗?...
是的 首先写一个测试代码: ` private void for_Test(){ List list =new ArrayList<>(); list.add(1); list.add(2 ...
- for循环中取出最大最小 累加_从零开始学Python - 第006课:循环结构
应用场景 我们在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景.例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令.在这个场景 ...
- 【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 ...
- c语言流程图菱形代表什么_求一个输出菱形的c语言的流程图,“行”一个循环,然后把菱形分为上三角(四行的)和下三角(三行)...
展开全部 学习C语言始终要记住"曙光在前头"和"千金难买回头e68a84e8a2ad62616964757a686964616f31333262376639看" ...
- 循环神经网络惊人的有效性(上)
版权声明:本文智能单元首发,本人原创翻译,禁止未授权转载. 译者注:经知友推荐,将The Unreasonable Effectiveness of Recurrent Neural Networks ...
- c语言中内循环和外循环的位置可能产生性能上的区别
∇ \nabla ∇ 联系方式: e-mail: FesianXu@gmail.com QQ: 973926198 github: https://github.com/FesianXu 知乎专栏: ...
最新文章
- [转]Windows与VC命名规则
- 三种复位方式: 同步复位、异步复位、异步复位同步释放
- 【转】简单的java缓存实现
- 详解在group by分组查询中where 和 having的用法和区别。
- zabbix监控防火墙和交换机
- mysql操作常见问题_MySQL:常见使用问题
- 算法与数据结构(part2)--Python内置类型性能分析
- 更改MyEclipse的默认编码
- FRR BGP协议分析14 -- 静态路由的处理流程
- 距7月30日PMP考试不足10天,应该做点什么?
- nero 2015 installing
- 分享一个奇葩SM2258XT板子(100-H00112581-590)没有CE跳线,只有CE飞线,顺便量产开卡
- 查看Oracle执行计划的几种常用方法-系列1
- 【PHP8入门指南】基础语法与变量
- 用环状天线测向电压表鉴相器电路定位的无线电测向仪
- 构建分布式系统——技术考量
- 扫雷小游戏最详细讲解【C语言】
- 第21节--非线性回归(下)
- 可编辑表格TableCell
- 浙江省2021年高新技术企业认定补贴奖励查询及优惠政策,国高达60万