27-Queue

作者: 鹏程1995 | 来源:发表于2020-02-04 15:36 被阅读0次

    类介绍

    Queue,直接翻译过来就是队列的意思。和大一的数据结构一样,就是一种一头进、另一头出的数据结构。

    敏感点:

    • 队列不都是FIFO,队列可以定制排序方式,实现每次把最大/最小的元素放队头然后取出
    • 队列有些特殊的规定,取队头和出队列时返回null则表示队空了,所以**Queue不支持null的存取
    • 这个不是线程安全的,线程安全的参见BlockingQueue

    接口分析对比

    队列的操作只有三种:进队、出队、取队头。

    队列根据自己的情况继承了Collectionadd方法作为进队。修改了Collectionremove方法的入参作为出队。然后自己新定义了一个方法作为取队头。

    对列因为很多的应用场景要频繁的进行修改(就像栈要不停的入栈出栈一样)。所以提供了两类方法:

    1. 第一类是Collection流派:如果对集合修改成功,那么ok;如果修改失败则该抛异常就抛异常,该返回false啥的就按规定走
    2. 第二类是Queue自己的风格:因为要频繁的修盖,老是抛出异常,每次都给try-catch,所以就干脆定义一些返回的值为无意义的,比如入队时返回false,比如取队头和出队列时返回null。【正好呼应上边的话】

    接下来主要对重要的接口进行介绍

    Collection风格的方法

    boolean add(E e);

    这个和Collection一样,注意这个方法根据各自的编码不同,是可以抛出异常的,比如ClassCastException,NullPointerException,IllegalArgumentException

    E remove();

    这个在Collection的基础上进行了一些修改,取消了入参。毕竟每次都是从队头取。会抛出NoSuchElementException(队列为空时抛出)

    E element();

    去队头,队列为空时抛出NoSuchElementException

    Queue风格的方法

    boolean offer(E e);

    本来Queue是不打算抛出异常或者少抛出异常的,但是毕竟是插入,总会有非法参数,所以也可以抛出异常:ClassCastException,NullPointerException,IllegalArgumentException

    但是在正常使用时一般靠返回的boolean判断入队是否成功。

    E poll();

    出队列,返回null表示队列空。不抛出异常。

    E peek();

    取队头,返回null表示队列空。不抛出异常。

    相关文章

      网友评论

          本文标题:27-Queue

          本文链接:https://www.haomeiwen.com/subject/awirxhtx.html