多面的LinkedList:可作队列,栈,双端队列

为什么LinkedList能当做栈,队列,双端队列?

参考Java学习笔记之LinkedList基本用法

笔记:

  1. 为什么LinkedList能当做栈,队列,双端队列?LinkedList是一个继承于AbstractSequentialList的双向链表。其中的每个对象包含数据的同时还包含指向链表中前一个与后一个元素的引用。LinkedList同时实现了List接口和Deque对口,也就是收它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(stack)
  2. 接一:LinkedList 实现 List 接口,能进行队列操作。
    LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。

LinkedList如何作为栈、队列、双端队列使用

LinkedList如何作为栈、队列、双端队列使用

笔记:

  1. 具体API看上面的链接
  2. LinkedList能当做栈时的API?
  3. LinkedList能当做队列时的API?
  4. LinkedList能当做双端队列时的API?

List接口长什么样?

参考Java集合总结系列:List接口及其实现

笔记:

  1. List接口长什么样?这得先看Collection 接口。因为Collection接口是 List / Set / Queue 接口的父接口,List / Set / Queue 的实现类中很多的操作方法其实还是调用Collection类定义的方法。
  2. 看看Collection在LinkedList继承体系中的位置
  3. 在这里插入图片描述

     Collection 接口其中方法可以分为以下几类:

    数据操作类方法:add/addAll/remove/removeAll/clear/retainAll/iterator

    判断类方法:contains/containsAll/equals/hashcode/isEmpty/size

    所有继承 Collection 接口的集合都可以用 Collection 中的方法进行元素操作,而具体的集合类有根据其特性增加了一些其特有的方法。

  4. List接口在Collection接口的基础上拓展了一些方法,增加了一些自己独有的方法。具体看上面的链接。

Deque接口什么样?

使用Deque

  1. Deque接口:

    queue是队列,只能一头进,另一头出。

    如果把条件放松一下,允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),学名Deque。

    Java集合提供了接口Deque来实现一个双端队列,它的功能是:

    • 既可以添加到队尾,也可以添加到队首;
    • 既可以从队首获取,又可以从队尾获取。
  2. Queue和Deque出队入队的区别?

    对于添加元素到队尾的操作,Queue提供了add()/offer()方法,而Deque提供了addLast()/offerLast()方法。添

    加元素到对首、取队尾元素的操作在Queue中不存在,在Deque中由addFirst()/removeLast()等方法提供。

    注意到Deque接口实际上扩展自Queue

  3. 在Java中,我们用Deque可以实现Stack的功能:

    • 把元素压栈:push(E)/addFirst(E)
    • 把栈顶的元素“弹出”:pop()/removeFirst()
    • 取栈顶元素但不弹出:peek()/peekFirst()

为什么使用Deque而不使用Stack构造栈

为什么使用Deque而不使用Stack构造栈

笔记:

  1. Stack和Collection的关系如下图:
  2.  
  3. 为什么使用Deque而不使用Stack构造栈?可以看出Stack是继承自Vector,而Vector有效率问题已经被弃用了,因此继承Vector的Stack也存在效率问题,故不推荐使用。       

为什么java不推荐使用Vector?

  1. Vector有什么效率问题?为什么会有效率问题?
  2. 以后补充
posted @ 2021-10-06 23:49  旷野之息  阅读(358)  评论(0编辑  收藏  举报