Queue介绍


美人如斯!java

前言

队列是一种先进先出(FIFO)的数据结构,与生活中的排队相似,即先来先被服务,这样的特色决定了其具备必定的优先级含义,能够被用于任务调度等场景。队列模型如图:
数据结构


图片名称


图1.队列模型
spa

java中的Queue
1.接口类Queue

java中经过定义Queue接口类及一系列行为来描述队列。队列的操做通常包括:出队和入队,Queue接口针对这些操做定义了三种行为:code

  • 插入:入队,向队列插入一个元素;
  • 移除:出队,从队列中移除一个元素;
  • 检查:从队列中获取一个元素,可是不移除;

其中每种行为又分为两种形式:blog

  • 快速失败(fail-fast),当即抛出异常
  • 返回特定的值,根据实现的不一样,返回null或者false

Queue的UML类图以下:
接口


图片名称


图2.Queue UML图
队列

  • add(): 向队列中增长一个元素,若是队列已满,将抛出IllegalStateException异常,增长成功,返回true;
  • offer(): 同add操做很相似,都是向队列中插入元素,区别在于,若是队列已满时,插入返回false;
  • remove(): 获取并移除队列头部的元素,若是队列是空,将抛出NoSuchElementException异常;
  • poll(): 同remove操做很相似,区别在于,若是队列是空,将返回null;
  • element(): 获取但不移除队头元素,若是队列是空,将抛出NoSuchElementException异常;
  • peek(): 同element操做很相似,区别在于,若是队列是空,返回null
2.实现

Queue的实现种类繁多,不一样的实现有不一样的应用场景。先经过总结性的归纳下其繁杂的种类,而后再分析些常见的队列。
根据以上UML图能够看出,根据不一样的特色,Queue大体能够分为三种类型:
Queue的UML类图以下:
图片


图片名称


图2.Queue UML图
element

  • Queue的直接实现
  • Deque双向队列:队头和队尾均能进行入队和出队操做
  • BlockingQueue阻塞队列:阻塞式队列,某些出队和入队操做会阻塞
相关文章
相关标签/搜索