【0】README

0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合——队列和双端队列+优先级队列 的相关知识;
0.2) for full source code , please visit https://github.com/pacosonTang/core-java-volume/blob/master/chapter13/DequeTest.java + https://github.com/pacosonTang/core-java-volume/blob/master/chapter13/PriorityQueueTest.java


【1】双端队列:可以让人们有效地在头部和尾部同时添加和删除元素。

1.0) Deque API are as follows :

  • java.util.Interface Deque
    Type Parameters:
    E - the type of elements held in this collection
  • All Superinterfaces:
    Collection, Iterable, Queue
  • All Known Subinterfaces:
    BlockingDeque
  • All Known Implementing Classes:
    ArrayDeque, ConcurrentLinkedDeque, LinkedBlockingDeque, LinkedList

1.1)在java SE6中, 引入了 Deque接口, 并由 ArrayDeque 和 LinkedList 类实现。 这两个类提供了双端队列, 而且在必要的时候增加队列长度;

  • API java.util.Queue 5.0
    boolean add(E element)
    boolean offer(E element)
    如果队列没有满, 将给定 的元素添加到这个双端队列的尾部并返回 true。 如果队列满了,第一个方法将抛出一个 IllegalStateException, 而第二个方法返回 false;

  • E remove() + E poll()
    假如队列不为空, 删除并返回这个队列头部的元素。如果队列为空,第一个方法抛出 NoSuchElementException, 而第二个方法返回 null;

  • E element() + E peek()
    如果队列不为空, 返回这个队列头部的元素, 但不删除。如果队里为空, 第一个方法将抛出一个 NoSuchElementException , 而第二个方法返回 null;
    (注意到, 以上方法中的第一个方法总是抛出异常, 而第二个方法返回null 或者 false)

  • API java.util.Deque 6
    void addFirst(E e)
    void addLast(E e)
    //以上两个方法出错,抛异常;
    boolean offerFirst(E e)
    boolean offerLast(E e)
    //以上两个方法出错,return false;
    将给定的对象添加到 双端队列的头部和尾部。 如果队列满了, 前两个方法将抛出一个 IllegalStateException, 而后面两个方法返回 false;

  • E removeFirst()
    E removeLast()
    //以上两个方法出错,抛异常;
    E pollFirst()
    E pollLast()
    //以上两个方法出错,return null;
    如果队列不为空, 删除并返回队列头部的元素;如果队列为空, 前面两个方法将抛出一个 NoSuchElementException, 而后面两个方法返回 null;

  • E getFirst()
    E getLast()
    //以上两个方法出错,抛异常;
    E peekFirst()
    E peekLast()
    //以上两个方法出错,return null;
    如果队列不为空, 返回队列头部的元素但不删除;如果队列为空, 前面两个方法将抛出一个 NoSuchElementException, 而后面两个方法返回 null;

  • API java.util.ArrayDeque 6
    ArrayDeque()
    ArrayDeque(int intialCapacity)
    用初始容量16或给定的初始容量构造一个无限双端队列;


【2】优先级队列

  • java.util.Class PriorityQueue
  • java.lang.Object
  • java.util.AbstractCollection
    • java.util.AbstractQueue

      • java.util.PriorityQueue
  • Type Parameters:
    E - the type of elements held in this collection
  • All Implemented Interfaces:
    Serializable, Iterable, Collection, Queue

2.1)优先级队列中的元素可以按照任意顺序插入, 却总是按照排序的顺序检索;也就是说, 无论何时调用 remove方法, 总会获得当前优先队列中最小的元素;

  • 2.1.1)优先队列使用了一个高效的数据结构——堆。(详见数据结构 的堆,大根堆和小根堆)
  • 2.1.2)和TreeSet一样, 一个优先队列既可以保存实现了 Comparable接口的类对象, 也可以保存在构造器中提供比较器的对象;
  • 2.1.3)优先级队列的典型应用是任务调度。 每一个任务有一个优先级, 任务以随机顺序添加到队列中。 每当启动一个新的任务时, 都将优先级最高 的任务从队列中删除;

2.2)看个荔枝:

API java.util.PriorityQueue 5.0
PriorityQueue()
PriorityQueue(int initialCapacity)
PriorityQueue(int initialCapacity, Comparator<? super E> c)
构造一个优先队列, 并用指定 的比较器对元素进行排序;

java集合——队列和双端队列+优先级队列相关推荐

  1. java双端队列工作密取,同步器皿、并发容器、阻塞队列、双端队列与工作密取...

    同步容器.并发容器.阻塞队列.双端队列与工作密取 在多线程的开发中经常会碰到数据的并发修改,并发存取,因此正确的使用不同的容器很关键,直接影响到数据的正确性.下面主要记录下三种重要的队列,以及一种非常 ...

  2. 数据结构与算法笔记(五)——队列(FIFO队列、双端队列)

    一.FIFO队列 1.1.概念 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出的(First In First Out)的线性表,简称FIFO.允许 ...

  3. 单向队列、双端队列、栈的模型实现

    引言 自己实现简单的队列.栈的逻辑结构. 队列都包含头和尾两个指针,简单的单向队列只能在一端(如:head端)入列,在另一端(如:tail 端)出列:双端队列可以在 head 进出,也可以在 tail ...

  4. 《恋上数据结构第1季》队列、双端队列、循环队列、循环双端队列

    队列(Queue) 队列 Queue 队列的接口设计 队列源码 双端队列 Deque 双端队列接口设计 双端队列源码 循环队列 Circle Queue 循环队列实现 索引映射封装 循环队列 – %运 ...

  5. 数据结构之队列、双端队列

    数据结构之队列.双端队列 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出的(First in First Out)的线性表,简称FIFO.允许插入的 ...

  6. python数据结构与算法——栈、队列与双端队列

    栈 栈:是一种容器,可存入数据元素.访问元素.删除元素,它的特点在于只能允许在容器的一端进行加入数据和输出数据的运算.没有了位置概念,保证任何时候可以访问.删除的元素都是此前最后存入的那个元素,确定了 ...

  7. apriori算法c++实现_经典数据结构与算法(四):Python/C/C ++实现队列类型双端队列数据结构...

    前期文章点击这里: 经典数据结构与算法(一):Python/C/C ++实现堆栈和队列 双端队列或双端队列是一种队列,其中可以从前面或后面执行元素的插入和删除.因此,它不遵循FIFO规则(先进先出). ...

  8. Java单链表、双端链表、有序链表实现

    Java单链表.双端链表.有序链表实现 原创 2014年03月31日 23:45:35 标签: Java / 单链表 / 双端链表 / 有序链表 65040 单链表: insertFirst:在表头插 ...

  9. Python数据结构学习笔记——队列和双端队列

    目录 一.队列的定义 二.队列 实现步骤分析 三.队列的Python实现代码 四.队列的应用 六人传土豆游戏 五.双端队列的定义 六.双端队列 实现步骤分析 七.双端队列的Python实现代码 八.双 ...

最新文章

  1. vue 引入的方法 用在template_?【有手就行】轻松打造属于自己的Vue工程化脚手架工具...
  2. 可与教科书相媲美的书——《世界是数字的》
  3. 參加microsoft主管信息論壇
  4. 留言板asp mysql_ASP简单入门(制作一个简单的留言板 )
  5. 海量存储之十九--一致性和高可用专题
  6. 做JSP大学实用教程实验
  7. 微软正式确认 Windows 7 RTM 的发布时间
  8. 黑马Python笔记1
  9. 【聚类算法】| Kmeans算法的Python实现(以西瓜数据集为例)
  10. 几款手机网站前端框架
  11. 闲谈一下,ES3、ES4、ES5、ES6 分别是什么
  12. 平板电脑可以用手写的计算机软件,手写平板电脑哪款好 手写平板电脑有哪些推荐...
  13. 点陶极速版《隐私政策》
  14. python制作简单动画_让数据动起来!用python制作动画可视化效果,让数据不再枯燥!...
  15. python爬取3万+条评论,解读猫眼评分9.5的《海王》是否值得一看?
  16. 28天打造专业红客(十一)
  17. 【自学Java】Java语言特点
  18. 无代码开发平台为什么能火?它是如何收费的
  19. ABAP 快速找到第二代增强的方法(基于函数出口增强function)
  20. android go 联发科 p10,联发科P10和高通骁龙435哪个性能强?联发科P10对比高通骁龙435评测...

热门文章

  1. cf1555A. PizzaForces
  2. Star Way To Heaven (prim最小生成树) // [ NOIP提高组 2014]飞扬的小鸟(DP)
  3. YBTOJ:最小数(欧拉函数)
  4. 8.16模拟:树上算法
  5. P1552-[APIO2012]派遣【左偏树】
  6. 欢乐纪中A组赛【2019.8.20】
  7. P1282-多米诺骨牌【dp,背包】
  8. Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final)
  9. 【随机】Ghd(CF364D)
  10. 一个简单的例子,学习自定义注解和AOP