zoukankan      html  css  js  c++  java
  • 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阻塞队列:阻塞式队列,某些出队和入队操作会阻塞
  • 相关阅读:
    mysql存储过程 --游标的使用 取每行记录 (多字段)
    mysql rowid实现
    redis进程守护脚本
    CF1042B 【Vitamins】(去重,状压搜索)
    CF1042A 【Benches】(优先队列)
    魔板 Magic Squares(广搜,状态转化)
    解方程(hash,秦九韶算法)
    noip模拟赛 动态仙人掌(并查集,贪心)
    (暴力碾标算)NOIP模拟赛 宗教仪式
    牛客网NOIP赛前集训营-提高组18/9/9 A-中位数
  • 原文地址:https://www.cnblogs.com/lxyit/p/9045831.html
Copyright © 2011-2022 走看看