Java Queue(队列)集合

Queue(队列)简介

Queue继承Collection,又提供了offer,pull,peek等方法,队列通常但不一定以FIFO(先进先出)方式排列元素,例如优先级队列,可以自己定义排列顺序。

  1. offer:插入一个元素,否则返回false
  2. remove()和poll()方法删除并返回队列的头部
  3. element()和peek()方法返回但不删除队列的头部

队列实现通常不允许插入空元素,但某些实现(如LinkedList)不禁止插入null。即使在允许它的实现中,也不应该将null插入到队列中,因为null也被poll方法用作特殊返回值,以指示队列不包含任何元素。

Queue接口没有定义阻塞队列方法,在其子接口BlockingQueue定义了阻塞队列的方法。

BlockingQueue

BlockingQueue可能受限于容量。在任何给定的时间,它可能有一个剩余的容量,超过这个容量不会有其他元素不被阻塞。没有任何固有容量约束的BlockingQueue总是报告Integer.MAX_VALUE的剩余容量。

BlockingQueue实现被设计为主要用于生产者 - 消费者队列,实现是线程安全的,不接受空元素。

有界队列和无界队列

  1. 无界队列 有drainTo(Collection c, int maxElements)方法的队列,基于链表的阻塞队列,又称无界队列。例如:LinkedBlockingQueue
  2. 有界队列:基于数组的阻塞队列,又称有界队列。所谓阻塞指的是加入时可以又延迟,offer(E e, long timeout, TimeUnit unit)。例如:ArrayBlockingQueue。队列满了,就加不进去了。

猜你喜欢

转载自blog.csdn.net/cdc_csdn/article/details/80717133