Queue介绍


美人如斯!

前言

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

图片名称

图1.队列模型

java中的Queue
1.接口类Queue

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

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

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

  • 快速失败(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图

  • Queue的直接实现
  • Deque双向队列:队头和队尾均能进行入队和出队操作
  • BlockingQueue阻塞队列:阻塞式队列,某些出队和入队操作会阻塞
posted @ 2018-05-16 14:25  怀瑾握瑜XI  阅读(459)  评论(0编辑  收藏  举报