赞
踩
目录
上一篇文章我们讲了链表到底是什么? 数组和链表的区别? 链表为何查询慢删除插入快?
详细可参考:java源码系列:链表是什么?数组和它有何不同?(2022-07-28更新完毕)_华哥折腾历险记的博客-CSDN博客
那么你们知道在我们 java util 下面有哪一个集合,它底层采用的就是链表来实现的吗?
不错,正是我们的 LinkedList!
链表(Linked list)是一种常见的基础数据结构,是一种线性表,
但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
链表可分为单向链表和双向链表。
一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。
一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。
Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。
与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。
以下情况使用 ArrayList :
- 频繁访问列表中的某一个元素。
- 只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList :
- 你需要通过循环迭代来访问列表中的某些元素。
- 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
LinkedList 继承了 AbstractSequentialList 类。
LinkedList 实现了 Queue 接口,可作为队列使用。
LinkedList 实现了 List 接口,可进行列表的相关操作。
LinkedList 实现了 Deque 接口,可作为队列使用。
LinkedList 实现了 Cloneable 接口,可实现克隆。
LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。
那LinkedList里面,我们一样也是看他的 add方法,因为往里面存值的话,它一定是用数据结构来进行存储的,
那我们可以发现这个 add 的方法,它是把这个 e 的值往 linkLast 里面去存,
那我们可以发现这个 linkLast 里面呢,它有一个叫 Node 的节点,
那这个节点大家我们来看,有 item,然后里面有个叫 next 的,还有一个叫 prev 的。
我想跟大家去讲,那这里呢,它出现了一个next,还出现一个prev
那大家你们知道这个是什么列表吗?就是我们列表呢,它分单向链表,双向链表,还有循环链表。
那刚才在这里,我从头节点指向下一个节点叫什么?叫单向节点。
那能不能就是说,我通过这个刘一去找这个张三,张三再去找monkey呢?
当然也是可以,所以在这里呢,这个节点叫 prev,
如下图:
这个有点像什么呢,有点像我们下一页上一页,OK,这就是我们链表的特性。
所以在这个地方我就跟大家去讲,如果在面试过程中啊,问你LinkedList和 ArrayList它们的区别?
其实就是问你数组和链表的区别。
1、你就回答说,这个面试官你好,如果呢,你查询的这个数据呢,只是啊,只是说经常查询,但是呢,不需要去修改这个数据呢,
那我建议你用ArrayList,因为ArrayList它底层用的是数组。数组的话,它的查询是比较快的。
2、那如果说你这个查询出来的数据呢,需要频繁对他进行修改的话,那我建议你用这个LinkedList,为什么用LinkedList呢?
因为我们用LinkedList,它底层用的是链表,那链表他的这个删除或者他的插入呢,是比较快的。
OK,就这样回答,那你就可以拿到满分。
所以呢,在这里呢,大家已经清楚了一个点,对吧!
参考地址:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。