当前位置:网站首页>用了这么多年的LinkedList,作者说自己从来不用它?为什么?
用了这么多年的LinkedList,作者说自己从来不用它?为什么?
2022-08-02 22:51:00 【Trouvailless】
老规矩,先来看一下目录:
一、概述
概述:LinkedList是一个双向链表的数据结构,所以它实现了Queue、List接口,继承关系如下:
二、为什么作者不用?
LinkedList是JDK1.2发布的,作者是Josh Bloch,简单介绍一下这位大佬。
Josh Bloch是 Java 集合框架创办人,Joshua Bloch 领导了很多 Java 平台特性的设计和实现,包括 JDK 5.0 语言增强以及屡获殊荣的 Java 集合框架。2004年6月他离开了SUN公司并成为 Google 的首席 Java 架构师,另外他还因为《Effective Java》一书获得著名的 Jolt 大奖。
为什么自己写的LinkedList自己却从来不用呢?这不就相当于:鹅厂的员工说自己从来不用微信吗?我的第一反应就是:不可能!
不过话又说回来,仔细想想自己在平时的工作中有用过吗?答案是没有。
在平时的工作中都是用的ArrayList,确实从来没有用过LinkedList!
大家也不用惊慌,作者还说了很多,让我们来看看:
作者:有人真的使用LinkedList吗?我写的,我从来没用过。
CE:我只是在非常罕见的情况下才这么做
NYW:我记得有些地方认为这是小型列表的好做法。
VS:我从TreeMap的源码中看到过它
作者:Doug Lea与我合著了TreeMap,我们确实使用了它。
IF:我想用过好几次,但它几乎没能在构思阶段存活下来
JR:链表在函数式语言中更受关注,例如Scala中默认的seq实现是链表。
作者:不要误会我的意思;我喜欢链表。它们在 C 中和在 Scheme 中一样有用。但 LinkedList 完全是另一回事。
JR:我想当我需要一个堆栈时,我用过一两次LinkedList。
作者:ArrayDeque 是一个很棒的堆栈、队列或双端队列。
CD:我在一个到处都有他们的项目工作。
B:ArrayList对每个人来说都足够了
UB:当我需要Java中的链表时,我总是发现自己用函数式实现它比使用LinkedList更容易
G:我在 10 多年中使用过几次。
DD:永远不要使用它。大多数时候使用 Array*。
小结:其实,作者的回答也非常明确了,LinkedList是基于双向链表实现的双端队列,链表和队列都是非常好的数据结构,但是在Java中LinkedList它存在性能与安全问题,所以在实际项目中是很少会用到的。
三、我们学不学?用不用?
我想,此时的你看源码可能有几个目的:
- 应付面试,在面试的时候面试官老爱问看过xxx底层源码没
- 做知识储备,弄懂底层原理,更能理解与架构上层应用
- 学习优秀的思想与设计
- 别问,问就是逼格高
有人这样认为:有一句话叫“不要重复造轮子”,所以可以不用去了解其底层,直接使用即可。
但我想说的是,如果你都不知道底层是怎么实现的,你又从何而知自己是在造轮子呢?
所以这个顺序应该是:首先知道轮子的底层原理实现,其次自己正准备做一个一模一样的轮子,才有“不要重复造轮子”。
小结:我们应该学习其底层优秀的思想与设计,同时“不要重复造轮子”。
四、如何使用?
原理设计图
源码分析:增
1、头插法addFirst:
1、动画理解头插法addFirst:
2、尾插法addLast:
2、动画理解尾插法addLast:
3、最常见的add:
源码分析:删
1、删除头节点:
1、动画理解删除头节点:
2、删除尾节点:
3、根据参数匹配删除:
3、动画理解根据参数匹配删除:
源码分析:改
源码分析:查
1、查找头节点getFirst:
2、查找尾节点getLast:
3、查找第x个节点:
node(int index)方法在上面已经分析过了哦~
五、性能如何?
关于性能这块,一般都是拿着LinkedList与ArrayList进行对比,网上有很多关于它们之间的比较,但是它们真的能比吗?
ArrayList对LinkedList : 老哥,我们来比较随机访问的性能吧!
LinkedList反怼了一句 : 哼,随机访问我实在是太慢了,要比咱们就比头节点插入!
ArrayList也撇嘴说 : 头节点插入是我的硬伤...把球给我,我要回家。
ArrayList与LinkedList真的能比吗?能比,但是必须建立在同一个需求的基础上,比如说:这个需求是每次都在最中间的位置插入节点;这个需求是每次都在最后面添加元素等等。所以对于性能的实践,李哥在这里就不多阐述了,留给以后做需求的你吧。
- END -
边栏推荐
- MySql查询某个时间段内的数据(前一周、前三个月、前一年等)
- Swift中的类型相关内容
- 2022杭电多校第一场(K/L/B/C)
- HCIP(16)
- The latest real software test interview questions are shared. Are you afraid that you will not be able to enter the big factory after collecting them?
- CentOS7 安装MySQL 图文详细教程
- scala 集合通用方法
- Week 7 - Distributional Representations(分布表示)
- HCIP(17)
- PHP实现登录失败三次需要输入验证码需求
猜你喜欢
随机推荐
Based on two levels of decomposition and the length of the memory network multi-step combined forecasting model of short-term wind speed
ZCMU--5230: 排练方阵(C语言)
B站回应HR称用户是Loser:涉事面试官去年底已被劝退
vscode 自定义快捷键——设置eslint
threejs dynamically adjust the camera position so that the camera can see the object exactly
记一次mysql查询慢的优化历程
秒懂网络拓扑中的下一跳地址
Kubernetes 进阶训练营 网络
非关系型数据库MongoDB简介和部署
VMware workstation program starts slowly
科研用Cholesterol-PEG-NHS,NHS-PEG-CLS,胆固醇-聚乙二醇-活性酯
APT level comprehensive free kill with Shell
买母婴产品先来京东“券民空间站”抢券!大牌好物低至5折
程序员如何优雅地解决线上问题?
测试人生 | 阿里实习 90 天:从实习生的视角谈谈个人成长
AcWing 2983. 玩具
Mock工具之Moco使用教程
Image recognition from zero to write DNF script key points
Speech Synthesis Model Cheat Sheet (1)
虚拟内存 virualmemory