zoukankan      html  css  js  c++  java
  • LinkedList的队列用法

    具体的LinkedList数据结构参考这个链接

    队列用法主要来自于Deque,而Deque又继承自Queue

    先从下面一段代码说起吧

    public static void main(String[] args) {
    Queue<String> queue=new LinkedList<>();
    queue.offer("张三");//队列尾部添加元素
    queue.offer("李四");
    queue.offer("王五");
    while (queue.peek()!=null){//返回头部信息,不改变队列
    System.out.println(queue.poll());//返回头部元素,改变队列
    }

    如果对于队列的数据结构不了解的话,对上面的注释内容会比较迷糊。
    Queue接口主要是使LinkedList具有队列的能力。
    队列类似于我们生活中的排队;特点就是先进先出,在尾部添加元素,从头部删除元素。

    boolean add(E e);在队列尾部添加元素;(当队列满时,会抛出异常;我从源码中并没有看到抛异常的代码,希望知情者告知一声)

    boolean offer(E e);在队列尾部添加元素,队列满时不会抛异常,只是返回false

    调用的就是上面的add方法
    E remove();删除队列中头部元素,如果是空队列,会抛异常。

    E poll();删除头部元素,如果队列为空,不会抛异常,会返回null

    E element();查看头部信息,如果空队列会抛异常

    E peek();查看头部信息,空队列返回你null

    说了了Queue队列的数据结构,那么Deque具体赋予了LinkeList什么能力了呢。
    因为Deque是接口,那么本身并没有实现Queue方法的能力。所以可以断定Deque只是扩展了Queue。

    Deque<String> deque=new LinkedList<>();
      deque.offer("张三");//队列尾部添加元素
      deque.offer("李四");
      deque.offer("王五");
      deque.addFirst("老郭");
      deque.addLast("老王");
      while (deque.peek()!=null){//返回头部信息,不改变队列
      System.out.print(deque.poll()+" ");//返回头部元素,改变队列
    //打印结果:老郭 张三 李四 王五 老王
    }

    从上面的代码我们知道可以在任何地方将元素添加到队列头。
    这与上面的Queue的数据结构就不相同了

    上面的代码根据方法名结合着Queue的几个方法名,可以知道具体用法;不做赘述了。
    如果把Queue比作排队的话,那么Deque就带插队的功能了;不光可以在队尾加元素;还可以在队头插入元素;
    并且只能插到队头,无法插到队中间。
    我们把Queue称作队列,Deque称作双端队列。
    队列和栈数据结构的区别:
    1.队列能操作两端;而栈只操作头部。
    2.队列是先进先出,而栈是先进后出。

    从上面的队列和栈的区别可以发现,他们的实现方法在Deque中都能找到,或者说是双端队列的特殊情况。

    顺便说一下java中没有单独的栈接口,但是有一个Stack类;它继承子Vercor这个类。

    Statck也实现了栈数据的一些方法,但是和Deque是有本质区别的。

    Statck中添加元素是线程安全的;LinkedList不是线程安全的;

    Statck操作的是数组;LinkedList操作的是链表结构的数据。


    1.在不需要线程安全的情况下,完全可以使用Deque deque=new LinkedList<>()代替。
    2.另外Deque deque=new LinkedList<>()也可以代替Queue queue=new LinkedList<>();

  • 相关阅读:
    vue比较模板来跟新数据
    iframe自适应高度
    springmvc接口ios网络请求
    spring mvc实现接口参数统一更改
    spring mvc实现自定义注解
    基于redis集群实现的分布式锁,可用于秒杀,定时器。
    java使用javax.mail进行免费的邮件发送
    前端图片压缩上传(纯js的质量压缩,非长宽压缩)
    java项目中的路径获取,request
    阿里云(腾讯云类似)服务器控制台配置开放所有的端口
  • 原文地址:https://www.cnblogs.com/guoyansi19900907/p/12174173.html
Copyright © 2011-2022 走看看