今天在网上冲浪,就看到有文章写说 LinkedList 的作者说他自己都不用 LinkedList,感觉既惊讶,又有点意思。

可能这就是大佬吧,我造轮子,但是我不用!或者这就是传说中的厨子不吃自己做的菜?

不扯了,言归正传。其实我个人觉得大佬说好像是事实,因为在业务上好像都用不到 LinkedList ,大多数场景下都是用 ArrayList 比较合适,我细数了下自己平日里的使用情况,真的都是 ArrayList 。

说到这,可能有人不同意了,说我可是看过面试题的,LinkedList 可是有它的优势的!

这题我也看过,没记错的话应该是:说说 ArrayList 和 LinkedList 的之间区别?

我觉得这题可谓之为“八股文前三甲”,其实这题映射过来也就是关于数组与链表的比较。

只要你在网上看过这道面试题,你看到的答案必然是:

  • 数组的随机访问快,插入和删除慢

  • 链表的插入删除快,随机访问慢

  • 频繁增删的情况下,用链表比较合适

  • 在随机查找多的情况下,用数组比较合适

问题就出在链表的频繁增删这一点。如果单从增加查这三个方法的时间复杂度来看,确实如此,没有错。

但是,在平时的使用上来说,这个说法就完全不成立!你想想,如果你要在链表中删除某个元素,你首先得找到它啊!这个链表的查找可耗时的呀!

所以在实际使用的时候,如果你有频繁的增删,也不应该用链表。

不信?我们来做个实验看看咯。

public class YesArrayLinkedBattle {private static final int COUNT = 100000;static List<Integer> fillList(List<Integer> list) {for (int i = 0; i < COUNT; i++) {list.add(i); //将list填满,假装我们在数据库里得到这么多数据}return list;}static void randomAdd(List<Integer> list, String listType) {long t1 = System.currentTimeMillis();for (int i = 0; i < COUNT; i++) {list.add(ThreadLocalRandom.current().nextInt(0,COUNT), i);}long t2 = System.currentTimeMillis();System.out.println(listType +"随机位置插入" + COUNT + "次耗时:" + (t2-t1));}public static void main(String[] args) {randomAdd(fillList(new ArrayList<>(COUNT)), "数组");randomAdd(fillList(new LinkedList<>()), "链表");}
}

这个实验很粗暴简单,但也很直观,分别对被填满数据的 ArrayList 和 LinkedList 执行 10 万次随机的插入操作,然后分别统计耗时。

执行结果如下:

是吧,在随机插入的情况下,链表不占优势反而大弱于数组!

所以说对于链表的插入操作,不能只关注其插入的时间复杂度,也要算上查找到前节点的开销,因此不能武断地说:频繁增删的情况下,用链表比较合适

当然,如果数据量很小的话,其实两者都是差不多的,比如长度都为 100 ,执行 100 次,则耗时如下:

长度都为 1000 ,执行 1000 次,则耗时如下:

所以,在数据量不大且操作次数不多的情况其实不必过于纠结到底用哪个。但在数据量较大且对时延敏感的情况下,建议还是做好测试,不能平白的根据一些“网上结论”而下定论。

技术交流群

最近有很多人问,有没有读者交流群,想知道怎么加入。

最近我创建了一些群,大家可以加入。交流群都是免费的,只需要大家加入之后不要随便发广告,多多交流技术就好了。

目前创建了多个交流群,全国交流群、北上广杭深等各地区交流群、面试交流群、资源共享群等。

有兴趣入群的同学,可长按扫描下方二维码,一定要备注:全国 Or 城市 Or 面试 Or 资源,根据格式备注,可更快被通过且邀请进群。

▲长按扫描

往期推荐

我被开除了。。只因为看了骂公司的帖子

一位阿里P9的年薪和家庭资产

我的新书终于写完了。

如果你喜欢本文,

请长按二维码,关注 Hollis.

转发至朋友圈,是对我最大的支持。

点个 在看 

喜欢是一种感觉

在看是一种支持

↘↘↘

LinkedList作者说他自己都不用LinkedList?看完给我整不会了。。相关推荐

  1. LinkedList 的作者说他自己都不用 LinkedList?

    今天在网上冲浪,看到有文章说 LinkedList 的作者说他自己都不用 LinkedList,我就特意去翻了翻他的推特,发现他确实说过这话! 可能这就是大佬吧,我造轮子,但是我不用!或者这就是传说中 ...

  2. 有一部龙珠上是打超级计算机的是哪一部,这20部七龙珠剧场版都没全部看完,还好意思说自己是龙珠迷?...

    龙珠动画自1986年首次上映至今已有32余年,这恐怕比许多粉丝的年龄还大! 而在这32年间除了<七龙珠><七龙珠Z><龙珠超>这几部官方主线动画外,龙珠系列还有20 ...

  3. 手机壳鸿蒙,手机壳后面为什么要放钱?好多人都不懂,看完我也放一张

    出门不带钱依然成为很多人的习惯,只要一个手机在手就能行万里路了,这说的是你的银行卡里面"粮食"充足,要不然你光拿个手机潇洒的出门,最后也只能恹恹的回来,所以还是先努力挣钱吧,才有资 ...

  4. 怎么让上下两排对齐_为什么你家装饰画怎么挂都怪怪的?看完再装立马就能美翻了!...

    家庭装修除了硬装之外,还包括了软装.软装即是家居的装饰,这里就包括了装饰画.装饰画可以让你家看起来更美观,正因如此,很多业主都会在家里挂上装饰画,但这就有了一个问题,那就是装饰画究竟该怎么挂起来才好看 ...

  5. java输出葫芦图形,干货教程!葫芦浅浮雕,每一步都讲解,看完觉得真可以自己做个了...

    大家好,今天我们又见面了. 今天我们还是来看一下葫芦工艺品的制作. 今天我们来做个大的葫芦,前几天一直做小葫芦,今天做个大的,25-30厘米的葫芦. 图案,我选择的是,雷锋,以及向雷锋同志学习 . 下 ...

  6. 【8】青龙面板系列教程之nolanjdc的一键安装获取cookie【作者删库了,不用尝试了】

    说明: 作者从纯纯的新手一步一步搭建了自己的青龙面板,所以教程内容会尽可能的详细,网上各样的教程不少,但都比较跳跃,我会把每一步的作用都写清楚,如果文中有错误之处,也欢迎指出. [作者删库了,不用尝试 ...

  7. 疫情凶猛!亚马逊:今年都不用来公司了

    西雅图IT圈:seattleit [今日作者]Dexter 读书巨慢理事会会长 01 随着Delta变种的愈演愈烈,美国大有进入下一次病毒大流行的趋势--连续3天每日确诊超过10万,其中重症和死亡病例 ...

  8. 未来计算机将怎么样改变我的生活,未来人类都不用上班 人工智能将如何改变我们的生活?...

    出品:科普中国 制作:海牛团队 监制:中国科学院计算机网络信息中心 据国外媒体报道,埃隆·马斯克(Elon Musk)指出,人工智能机器可能会取代人类,成为新的劳动力.随着自动化在未来成为常态,可供人 ...

  9. luci L大_油耗最低1.4L!开这四款车一个月都不用进加油站

    如今人们对于纯电动车的接受程度在日益增加,但续航问题依旧没有完全解决,成为了许多人难以逾越的关卡.其实,插电式混动车型同样适合作为消费者的首选,其具备了纯电动车易上牌.环保节能的优势,同时还保留了传统 ...

最新文章

  1. 推荐Scum敏捷开发的几款工具
  2. c语言关键字不做标识符,C语言标识符、关键字、注释、表达式和语句
  3. java 协程框架_GitHub - yaozhang0105/dactor: Dactor是基于Java的轻量级同步异步统一处理框架,基于协程思想构建...
  4. arm的存储保护单元MPU
  5. hashmap为什么线程不安全_面试官:你说 HashMap 线程不安全,它为啥不安全呢?...
  6. 方立勋_30天掌握JavaWeb_EL表达式功能详解
  7. 云堆栈三大服务模式解析
  8. HTTP1.1 Keep-Alive到底算不算长连接?
  9. qdialog 只有点击才能获得焦点_4 个突破点,让你的 Banner 点击率提升10倍
  10. K8S Calico
  11. Java进阶篇设计模式之十三 ---- 观察者模式和空对象模式
  12. 深入浅出Node.js(一):什么是Node.js
  13. Java数据库课程设计-招聘人才管理系统
  14. oracle卸载报错,oracle卸载
  15. php开源源码管理后台小程序团购,秒杀,分销 高可用
  16. oracle数据库查询904错误,EXP-00008:遇到ORACLE错误904问题详解
  17. PHP8.0正式版的编译安装与使用
  18. 汉语言文学的毕业论文有创意的选题有哪些?推荐一下?
  19. 用Python找回微信撤回信息
  20. 小米6内存测试软件,小米6采用的是eMMC还是UFS2.1?来测试一下吧

热门文章

  1. linux ls不显示total,Linux中使用ls指令时total的意思
  2. AF_INET域与AF_UNIX域socket通信原理对比
  3. 如何移植mysql数据库_如何把本地MySql数据库移植到远程服务器上
  4. 供应链 信用管理 大数据_智慧供应链大数据技术架构方案(ppt)
  5. ServiceManager
  6. @configuration注解_超级全面的 SpringBoot 注解介绍,每一个用途都应该清晰
  7. python做插件应用_Python插件机制实现详解
  8. 快速幂(求A^B的最后三位数表示的整数(A^B的含义是A的B次方))(java)
  9. Python爬虫之puppeteer之遇到的bug及解决方法
  10. Java 异常处理(标准抛异常、异常处理、多异常、Finally、多线程异常处理、获取异常的堆栈信息、链试异常、自定义异常)