来,一起阅读源码,通过LinkedList回顾基础( 四 )


Deque体系下的方法:
当我们把LinkedList当队列和栈使用时 , 主要用到的就是Deque体系下的方法 。
来,一起阅读源码,通过LinkedList回顾基础文章插图
如果你稍微细看一下 , 会发现上述很多方法基本是重复的 , 比如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 f = first;return (f == null) ? null : f.item; }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 f = first;return (f == null) ? null : unlinkFirst(f);}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相关的 , 也有最基础数据结构的知识 , 比如链表相关的操作 。 第一次画图来说明问题 , 有时候真的是一图胜千言 。 写到这里最大的感受是基础很重要 , 它决定了你能走多远 。
希望我的文章能给你带来一丝帮助!
作者:希夷小道
链接:
来源:掘金