从零开始带你学习Java中的数据结构之Queue队列

数据结构文章汇总
从零开始带你学习Java中的数据结构之HashMap
从零开始带你学习Java中的数据结构之Queue
从零开始带你学习Java中的数据结构之Stack
从零开始带你学习Java中的数据结构之Arrays/ArrayList
从零开始带你学习Java中的数据结构之List/LinkedList
从零开始带你学习Java中的数据结构之Map
从零开始带你学习Java中的数据结构之Set
从零开始带你学习Java中的数据结构之String,StringBuffer,StringBuild

1.Queue简介

Queue设计用于处理之前保持元件。 除了基本的Collection操作,队列提供额外的插入,提取和检查操作。 每一种方法以两种形式存在:如果操作失败之一抛出异常,其他返回一个特殊值( null或false ,这取决于操作)。 插入操作的后一种形式是专为与容量限制的使用而设计的Queue的实现; 在大多数实现中,插入操作不能失败

队列通常但不一定是以FIFO(先进先出)方式排序元素。 除了优先级队列之外,优先级队列是根据提供的比较器对元素进行排序,还是元素的自然排序,以及对元素LIFO(先进先出)进行排序的LIFO队列(或堆栈)。 无论使用什么顺序,队列的头都是通过调用remove()或poll()删除的元素。 在一个FIFO队列,所有新元素插入到队列的尾部 。 其他类型的队列可以使用不同的布局规则。 每个Queue实现必须指定其排序属性。

如果可能, offer方法插入一个元素,否则返回false 。 这与Collection.add方法不同,只能通过抛出未经检查的异常来添加元素。 offer方法设计用于在故障是正常的情况下使用,而不是异常发生,例如在固定容量(或“有界”)队列中。

remove()和poll()方法删除并返回队列的头。 从队列中删除哪个元素是队列排序策略的一个功能,它与实现不同。 remove()和poll()方法在队列为空时的行为不同: remove()方法抛出异常,而poll()方法返回null 。

element()和peek()方法返回,但不要删除,头的队列。

Queue接口没有定义阻塞队列方法 ,这在并发编程中是常见的。 这些等待元素出现或空格变得可用的方法在BlockingQueue接口中定义,该接口扩展了此接口。

Queue实现通常不允许插入null元素,尽管一些实现(例如LinkedList )不禁止插入null 。 即使在允许它的实现中, null插入到Queue ,因为null也被poll方法用作特殊的返回值,以指示队列不包含元素。

Queue实现通常不定义基于元素的方法equals和hashCode的方法,而是从类别Object继承基于标识的版本,因为基于元素的等式并不总是很好地定义了具有相同元素但不同的排序属性的队列。

  • 父接口:Collection < E>, Iterable < E>

2.如何创建Queue队列

  • Queue<String> queue = new LinkedList<String>();

3.Queue队列常用方法

  • boolean add(E e)
    将指定的元素插入到此队列中,如果可以立即执行此操作而不违反容量限制, true在成功后返回 IllegalStateException如果当前没有可用空间,则抛出IllegalStateException
  • boolean offer(E e)
    如果在不违反容量限制的情况下立即执行,则将指定的元素插入到此队列中。 当使用容量限制队列时,此方法通常优于add(E) ,这可能无法仅通过抛出异常来插入元素
  • remove()
    检索并删除此队列的头。 此方法与poll不同之处在于,如果此队列为空,它将抛出异常。返回这个队列的头
  • poll()
    检索并删除此队列的头,会返回这个队列的头。如果此队列为空,则返回 null
  • E peek()
    检索但不删除此队列的头部,返回这个队列的头,如果此队列为空,则返回 null

猜你喜欢

转载自blog.csdn.net/weixin_40485391/article/details/107742887