来,一起阅读源码,通过LinkedList回顾基础( 四 )
Deque体系下的方法:
当我们把LinkedList当队列和栈使用时 , 主要用到的就是Deque体系下的方法 。
文章插图
如果你稍微细看一下 , 会发现上述很多方法基本是重复的 , 比如push(E e)其实就是调用了addFirst(e) ,
addFirst(e)也是直接调用了linkFirst(e);pop()就是直接调用了removeFirst();
为啥搞这么麻烦 , 一个方法起这么多名称? 其实是因为从不同角度来看LinkedList时 , 它具有不同的角色 。 可以说它哪里都能添加 , 哪里都能删除 。
具体使用时建议仔细看下对应注释 。
作为队列
队列的基本特点是“先进先出” , 相当于链表尾添加元素 , 链表头删除元素 。
对应的方法是offer(E e) , peek() , poll()
public boolean offer(E e) {return add(e);}public boolean add(E e) {linkLast(e);return true;}
可以看出offer方法的本质还是在链表末尾添加元素 , linkLast(e)方法前面已经讲到 。
/*** Retrieves, but does not remove, the head (first element) of this list.** @return the head of this list, or {@code null} if this list is empty* @since 1.5*/public E peek() {final Node
peek()方法返回队列第一个元素 , 但是不删除元素 。 也就是说多次peek得到同一个元素 。
/** * Retrieves and removes the head (first element) of this list. * * @return the head of this list, or {@code null} if this list is empty * @since 1.5 */public E poll() {final Node
poll() 方法返回队列第一个元素的同时并将其从队列中删除 。 也就是多次poll得到不同元素 。
显然poll方法更符合队列的概念 。
这里没有详细解说删除相关的方法 , 是因为如果前面的添加方法细看了 , 删除方法也很简单 , 无非是越过被删除的元素连接指针 , 这里没必要浪费篇幅 。 不妨自己画一下 , 有助于理解 。
作为栈
栈的基本特点是“先进后出” , 相当于链表头部添加元素 , 头部删除元素 。
对应的方法是push(E e)和pop() 。
public void push(E e) {addFirst(e);}public void addFirst(E e) {linkFirst(e); }
可以看出 , push是在调用addFirst , 进而调用linkFirst(e) , 而在头部添加元素 , add(int index, E element)方法处已经讲到了 , 大体只是方法名不一样而已 。
public E pop() {return removeFirst();}
pop()方法返回并删除第一个元素 。
总结这篇文章主要讲了LinkedList相关的最基本的内容 , 更多的是回顾一些基础知识 , 既有java相关的 , 也有最基础数据结构的知识 , 比如链表相关的操作 。 第一次画图来说明问题 , 有时候真的是一图胜千言 。 写到这里最大的感受是基础很重要 , 它决定了你能走多远 。
希望我的文章能给你带来一丝帮助!
作者:希夷小道
链接:
来源:掘金
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- 空调|让格力、海尔都担忧,中国取暖“新潮物”强势来袭,空调将成闲置品?
- 手机基带|为了5G降低4G网速?中国移动回应来了:罪魁祸首不是运营商
- 计费|5G是如何计费的?
- V2X|V2X:确保未来道路交通数据交换的安全性
- 助力|上班族的小妙招:怎么弄pdf签名?编辑器来助力
- iPhone|折叠屏iPhone要来?曝苹果开始测试|OPPO Reno5真机曝光
- T.I.T:“科创引领 数启未来”的弄潮儿
- 苹果|iPhone13迎来变化!或回归指纹解锁,这几点备受用户喜爱
- 易来|RA95显色只是起步,2020双12选灯必逛好店!