当前位置:   article > 正文

java源码系列:LinkedList的底层实现原理和特性_java 数组 链表 底层实现

java 数组 链表 底层实现

目录

1、简介

2、LinkedList 概念

3、LinkedList 源码查看

Node节点类( item、next、prev )


1、简介


上一篇文章我们讲了链表到底是什么? 数组和链表的区别? 链表为何查询慢删除插入快?

详细可参考:java源码系列:链表是什么?数组和它有何不同?(2022-07-28更新完毕)_华哥折腾历险记的博客-CSDN博客

那么你们知道在我们 java util 下面有哪一个集合,它底层采用的就是链表来实现的吗?

不错,正是我们的 LinkedList!

2、LinkedList 概念

链表(Linked list)是一种常见的基础数据结构,是一种线性表,

但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

链表可分为单向链表和双向链表。

一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。

一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。

 Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。

与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

LinkedList 继承了 AbstractSequentialList 类。

LinkedList 实现了 Queue 接口,可作为队列使用。

LinkedList 实现了 List 接口,可进行列表的相关操作。

LinkedList 实现了 Deque 接口,可作为队列使用。

LinkedList 实现了 Cloneable 接口,可实现克隆。

LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。

3、LinkedList 源码查看

那LinkedList里面,我们一样也是看他的 add方法,因为往里面存值的话,它一定是用数据结构来进行存储的,

那我们可以发现这个 add 的方法,它是把这个 e 的值往 linkLast 里面去存,

Node节点类( item、next、prev )

那我们可以发现这个 linkLast 里面呢,它有一个叫 Node 的节点,

那这个节点大家我们来看,有 item,然后里面有个叫 next 的还有一个叫 prev 的

我想跟大家去讲,那这里呢,它出现了一个next,还出现一个prev

 那大家你们知道这个是什么列表吗?就是我们列表呢,它分单向链表,双向链表,还有循环链表。

那刚才在这里,我从头节点指向下一个节点叫什么?叫单向节点。

那能不能就是说,我通过这个刘一去找这个张三,张三再去找monkey呢?

当然也是可以,所以在这里呢,这个节点叫 prev,

如下图:

这个有点像什么呢,有点像我们下一页上一页,OK,这就是我们链表的特性。

所以在这个地方我就跟大家去讲,如果在面试过程中啊,问你LinkedList和 ArrayList它们的区别?

其实就是问你数组和链表的区别。

1、你就回答说,这个面试官你好,如果呢,你查询的这个数据呢,只是啊,只是说经常查询,但是呢,不需要去修改这个数据呢,

那我建议你用ArrayList,因为ArrayList它底层用的是数组。数组的话,它的查询是比较快的。

2、那如果说你这个查询出来的数据呢,需要频繁对他进行修改的话,那我建议你用这个LinkedList,为什么用LinkedList呢?

因为我们用LinkedList,它底层用的是链表,那链表他的这个删除或者他的插入呢,是比较快的。

OK,就这样回答,那你就可以拿到满分。

所以呢,在这里呢,大家已经清楚了一个点,对吧!

参考地址:

Java LinkedList | 菜鸟教程

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/301894
推荐阅读
相关标签
  

闽ICP备14008679号