Java中队列Queue和Deque的区别与代码实例

学过数据结构的,一定对队列不陌生,java也实现了队列,下面这篇文章主要给大家介绍了关于Java中队列Queue和Deque区别的相关资料,需要的朋友可以参考下

Java中队列Queue和Deque的区别与代码实例,久久派带你了解更多相关信息。

目录
  • 一、Queue和Deque
  • 二、api对比
  • 三、代码实例
  • 总结

    一、Queue和Deque

    Queue以及Deque都是继承于Collection,Deque是Queue的子接口。

    Queue是FIFO的单向队列,Deque是双向队列。

    Queue有一个直接子类PriorityQueue,而Deque中直接子类有两个:LinkedList以及ArrayDeque。

    PriorityQueue的底层数据结构是数组,而无边界的形容,那么指明了PriorityQueue是自带扩容机制的。

    ArrayDeque是无初始容量的双端队列,LinkedList则是双向链表。

    PriorityQueue可以作为堆使用,而且可以根据传入的Comparator实现大小的调整,会是一个很好的选择。
    ArrayDeque通常作为栈或队列使用,但是栈的效率不如LinkedList高。
    LinkedList通常作为栈或队列使用,但是队列的效率不如ArrayQueue高。

    二、api对比

    QueueDeque
    增加addadd、addFirst、addLast
    offeroffer、offerFirst、offerLast
    移除removeremove、removeFirst、removeLast
    pollpop、poll、pollFirst、pollLast
    获取elementelement、getFirst、getLast
    peekpeek、peekFirst、peekLast

    备注:

    1、add和offer区别

    • add() : 添加元素,如果添加成功则返回true,如果队列是满的,则抛出异常
    • offer() : 添加元素,如果添加成功则返回true,如果队列是满的,则返回false

    2、remove和poll

    • remove() : 移除队列头的元素并且返回,如果队列为空则抛出异常
    • poll() : 移除队列头的元素并且返回,如果队列为空则返回null
    • Deque新增了一个pop方法,也是移除队列头的元素并且返回,如果队列为空则抛出异常。

    3、element和peek

    • element() :返回队列头元素但不移除,如果队列为空,则抛出异常
    • peek() :返回队列头元素但不移除,如果队列为空,则返回null
    • 因此,增加推荐使用add,移除推荐使用poll,获取元素推荐使用peek。

    三、代码实例

    1、queue

    队列(queue)是一种常用的数据结构,可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则。Java中,LinkedList实现了Queue接口,因为LinkedList进行插入、删除操作效率较高。

    初始化:

    Queue <Integer> q = new LinkedList<Integer>();

    常用方法:

    **add(E e)😗*将指定元素插入此队列尾部,成功返回true。

    **offer(E e)😗*将指定元素插入队列尾部,成功返回true。当队列有容量 限制时,此方法由于add,因为后者可能无法插入,而只是抛出IllegalStateException异常。

    **remove()😗*获取并移除队列的头部元素,队列为空抛出异常。

    **poll():**获取并移除队列的头部元素,队列为空返回null。

    **element()😗*获取但是不移除队列头部元素,队列为空抛出异常。

    **peek()😗*获取但是不移除队列头部元素,队列为空返回null。

    **isEmpty()😗*判断队列是否为空,为空返回true。

    **size()😗*获取队列元素数量.

    实例代码:

    public static void test01(){    Queue<String> queue = new LinkedList<>();    // add()和remove()方法在失败的时候会抛出异常(不推荐)    queue.offer(\"a\");    queue.offer(\"b\");    queue.offer(\"c\");    queue.offer(\"d\");    queue.offer(\"e\");    queue.add(\"f\");    //在队列元素为空的情况下,remove() 方法会抛出NoSuchElementException异常,poll() 方法只会返回 null 。    String first2 = queue.remove();//返回第一个元素,删除    System.out.println(first2);//a    String first1 = queue.poll();//返回第一个元素,删除    System.out.println(first1);//b    String first = queue.peek();//返回第一个元素,但不删除    System.out.println(first);//c    System.out.println(queue);//[c, d, e, f]    first = queue.element();//返回第一个元素    System.out.println(first);//c}

    2、deque

    双向队列是指该队列两端的元素既能入队(offer)也能出队(poll),如果将Deque限制为只能从一端入队和出队,则可实现栈的数据结构。对于栈而言,有入栈(push)和出栈(pop),遵循先进后出原则。

    初始化:

    Deque<Integer> d = new LinkedList<Integer>();

    常用方法:

    **addLast(E e)😗*在队列尾部插入元素.

    **offerLast(E e)😗*在队列尾部插入元素。

    **removeFirst()😗*获取头部元素。

    **pollFirst()😗*获取头部元素。

    **getFirst()😗*获取头部元素。

    **peekFirst()😗*获取头部元素。

    //上述方法均和queue中方法一一对应。
    //且queue中的方法,deque中均可用。

    **getLast()😗*获取但不移除队列最后一个元素。

    **offerFirst()😗*将指定元素插入队列开头。

    **peekLast()😗*获取但不移除双端队列最后一个元素。

    **pollLast()😗*获取并移除双端队列最后一个元素。

    **pop()😗*从双端队列表示的堆栈 中弹出一个元素。

    **push()😗*将一个元素推入双端队列表示的堆栈,即队列的头部。成功返回true,如果没有可用空间,抛出IllegalStateException。

    **removeLast()😗*获取并移除移除双端队列最后一个元素。

    **size()😗*返回双端队列元素数。

    **isEmpty()😗*判断队列是否为空,为空返回true。

    **remove(Object o)😗*从双端队列中移除第一次出现的指定元素。

    实例代码:

    public static void test02(){    Deque<String> deque = new LinkedList<>();    deque.offer(\"a\");    deque.offer(\"b\");    deque.offerFirst(\"c\");//在队列头部进行插入    System.out.println(deque);//[c, a, b]    deque.offerLast(\"d\");    System.out.println(deque);//[c, a, b, d]     String ret = deque.element();//返回第一个元素    System.out.println(ret);//c     ret = deque.getFirst();//返回第一个元素    System.out.println(ret);//c    ret = deque.getLast();//返回最后一个元素    System.out.println(ret);//d     ret = deque.peek();//返回第一个元素,但不删除    System.out.println(ret);//c     ret = deque.peekFirst();//返回第一个元素,但不删除    System.out.println(ret);//c    ret = deque.peekLast();//返回最后一个元素,但不删除    System.out.println(ret);//d     System.out.println(deque);     ret = deque.poll();//返回第一个元素,删除    System.out.println(ret);//c    System.out.println(deque);//[a, b, d]     ret = deque.pop();//返回第一个元素,删除    System.out.println(ret);//a    System.out.println(deque);//[b, d]     deque.clear();    ret = deque.pop();//抛异常    System.out.println(\"11111\");    ret = deque.poll();//返回null,但不抛异常    System.out.println(\"++\"+ret);    System.out.println(\"22222\");}

    总结

    到此这篇关于Java中队列Queue和Deque区别的文章就介绍到这了,更多相关Java队列Queue和Deque区别内容请搜索趣讯吧以前的文章或继续浏览下面的相关文章希望大家以后多多支持趣讯吧!

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/15295.html

    (0)
    nan
    上一篇 2021-08-19
    下一篇 2021-08-19

    相关推荐

    • 收藏古钱在什么地方可以卖(哪里可以卖掉古钱币)

      如果去找一找以前老人留下来的东西,在里面总能看到一些老人留下来的钱币,这和那个时代有关系,很多人都愿意留一手,藏起来一部分的钱,不相信银行但是随着时间的推移,生活渐渐好了,这些钱就用不上了。偶尔翻到这些过去的东西总能找到些过去的钱币:但

      2022-01-07 行业动态
      0
    • 除夕2022年放假安排时间表2022年春节除夕是法定假日吗

      摘要:你觉得春节七天假期够吗?再过十天就是春节了。2022年春节假期安排也已公布,从2022年1月31日至2月6日结束,共7天。你觉得春节七天假期够吗?再过十天就是春节了。2022年春节假期安排也已公布,从2022年1月

      2022-01-20
      0
    • g502拆解教程(罗技g502更换微动开关)

      游戏鼠标轻量化趋势下,相对较沉的罗技G502(121g裸重,含配重139g)近年来也就被贴上了“电竞哑铃”的标签,又常被调侃成为“习武之人”专用鼠标。期间,经历过升级换代,但模具本身并没改动,只换装H

      2021-12-13 行业动态
      0
    • 苏泊尔紫砂锅价格(苏泊尔电饭煲好的型号)

      接下来的日子,我们将和大家一起走进紫砂的世界,了解紫砂文化、爱上紫砂情怀。我们会详细介绍了宜兴紫砂的起源与发展,矿料性能、材质特点、分布状况及开采、加工、烧成等全过程。并着重介绍了紫砂矿料的种类,对每

      2021-12-13 行业动态
      0
    • 抖音做外卖,到底有没有戏?

      编辑导语:外卖市场在未来还有一定的发展空间,那么,抖音做外卖,能成功吗?一方面,抖音若入局外卖市场,则可以为外卖商家提供一定的流量渠道;另一方面,若想有所成果,抖音需要做好差异化玩法,并且找准自身发展模式。本文作者对抖音若做外卖一事发表了他的看法,一起来看一下。据Tech星球爆料,抖音已于近日成立了一个针对外卖业务的团队,并在抖音App内开始了内测。外卖业务…

      2021-08-10 行业动态
      0
    • 法兰琳卡化妆品价格表(法兰琳卡护肤品系列介绍)

      法兰琳卡原料是纯植物精华,是非常安全健康的,可以帮助肌肤保湿、补水、美白。那么,法兰琳卡适合什么肤质?适合什么年龄?下面就跟随小编一起来看看吧。现实的3d奢侈品系列化妆品美容护肤品套装集矢量插图法兰琳

      2021-12-13 行业动态
      0

    发表回复

    登录后才能评论