专栏首页IT大咖说LinkedList给我深深的上了节for增强的课

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增强缺点

总结:

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

来都来了,走啥走,留个言呗~

IT大咖说 | 关于版权

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。

本文分享自微信公众号 - IT大咖说(itdakashuo),作者:老徐聊技术

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为啥看并发源码中,经常使用for(;;)而不是使用while(true)?

    这里的区别就非常明显了,for(;;)在c语言中指令较少,也能够节省内存,没有判断跳转,是比while(1)更好的无限循环。

    IT大咖说
  • 嘘!不可外传的办公室黑科技,看多少人在背后说你坏话

    内容来源:量子位,链接:https://mp.weixin.qq.com/s/EpP4C4kVhsSaLBhj_9wB7w

    IT大咖说
  • 降低大数据开发难度,轻量级计算实例

    内容来源:2018 年 1 月 27 日,润乾软件创始人蒋步星在“TECH INSIGHT 暨 ArchData技术峰会成都站”进行《轻量级大数据引擎》演讲分享...

    IT大咖说
  • 右旋方阵

    lop
  • 嵌套的for循环,到底对哪个执行pipeline更好

    嵌套的for循环在算法建模时经常遇到,那么采用Vitis HLS进行综合时,到底是对外层for循环还是内层for循环执行pipeline更好呢?我们来看一个简单...

    Lauren的FPGA
  • Python循环控制之for

    各位小伙伴们 大家周三愉快 今天我们要来共同探讨 另外一个在Python中 (严格的说实在所有语言中) 最重要的语句之一 For()循环控制语句 技术要点: f...

    企鹅号小编
  • 最短路径(一)——多源最短路径

    引出问题:多源最短路径的问题 暑假,小文准备去一些城市旅游。为了节省经费以及方便计划旅程,小文希望知道任意两个城市之间的最短路径。假如有四个城市八条公路。 我们...

    深度学习思考者
  • 输入行列的值,打印出左手旋转矩阵。

    问题描述 输入行列的值,打印出左手旋转矩阵。 输入格式 输入一行,不超过20的m,n表示矩阵的行和列 。 样例输入 4 3 样例输出 1    2  ...

    lop
  • 二维数组和循环-c语言学习笔记

    Youngxj
  • 第15讲 for循环优化:基本性能指标

    在算法建模时,for循环经常被用到(能用for循环就不要用while循环,因为for循环会让代码更紧凑)。因此,Vivado HLS提供了针对for循环的多种优...

    Lauren的FPGA

扫码关注云+社区

领取腾讯云代金券