Java集合之Queue接口

标签: Java集合
29人阅读 评论(0) 收藏 举报
分类:

Queue

队列集合在集合的基础上添加了增删改查操作,并且队列默认使用FIFO(先进先出)规则。

Queue接口

Queue接口
队列的主要特点是在基本的集合方法之外,还提供特殊的插入、获取和检验操作。每个操作都提供两个方法,一种返回异常,一种返回null或者false.
队列一般满足先进先出规则(FIFO),除了优先队列(priority queue)和栈(stack),但是栈是FILO(先进后出规则),优先队列自己定义了排序规则。
队列不允许插入null元素,但是LinkedList可以
- add(E e) 插入一个元素到队列中,失败时返回IllegalStateException (队列容量不够)
- element() 返回队列头部的元素
- offer(E e) 插入一个元素到队列中,失败时返回false
- peek() 返回队列头部的元素,队列为空时返回null
- poll() 返回并移除队列的头部元素,队列为空时返回null
- remove() 返回并移除队列的头部元素

Deque

双端队列是一种线性集合,可以从两端操作的队列。

Deque
Deque接口
双端队列
- add(E e) 将新元素添加到队列的尾端(当不超过队列的容量时)
- addFirst(E e) 将新元素添加到队列的头部
- addLast(E e) 将新元素添加到队列的尾部
- contains(Object o) 双端队列是否含有对象o
- descendingIterator()倒叙返回队列的迭代器
- element() 返回队列的头部元素
- getFirst() 获取头部元素
- getLast() 获取尾部元素
- iterator() 迭代队列
- offer(E e) 将新元素插入到队列尾部
- offerFirst(E e) 将新元素添加到队列的头部
- offerLast(E e) 将新元素添加到队列的尾部
- peek() 返回队列的头部元素
- peekFirst() 获取头部元素
- peekLast() 获取尾部元素
- pool() 返回并移除队列的头部元素
- poolFirst() 获取并移除头部元素
- poolLast() 获取并移除尾部元素
- pop() 将一个元素出栈
- push(E e) 讲一个元素压入栈
- remove() 移除队列的头部元素
- remove(Object o) 移除队列中第一个o
- removeFirst() 移除队列的头部元素
- removeFirstOccurrence(Object o) 移除队列中第一个o
- removeLast() 移除队列的尾部元素
- removeLastOccurrence(Object o) 移除队列中最后一个o
- size()

ArrayDeque

双端队列的数组实现类,底层数据存储在数组中,数组双端队列是可扩容的.

数组双端队列就是双端队列接口的实现类,没有额外的功能,这里不详细讨论了。

PriorityQueue
不同于Queue,PriorityQueue优先队列默认按照自然顺序排序元素,或者按照定义的比较器排序元素。

逻辑上使用堆结构(完全二叉树)实现,物理上使用动态数组实现,并非像TreeMap一样完全有序,但是如果按照指定方式出队,结果可以是有序的。
可参考:堆结构的优秀实现类—-PriorityQueue优先队列

BlockingQueue

A Queue that additionally supports operations that wait for the queue to become non-empty when retrieving an element, and wait for space to become available in the queue when storing an element.
BlockingQueue methods come in four forms, with different ways of handling operations that cannot be satisfied immediately, but may be satisfied at some point in the future: one throws an exception, the second returns a special value (either null or false, depending on the operation), the third blocks the current thread indefinitely until the operation can succeed, and the fourth blocks for only a given maximum time limit before giving up.

阻塞队列用于处理当前操作无法立即满足的场景,比如队列中没有多余的存储空间时。

阻塞队列有四种实现方式:第一种当目前操作无法满足时,立即抛出异常,第二种当目前操作无法满足时,返回null或者false,第三种会无限阻塞直到操作成功,第四种会阻塞一定的时间(given maximum time limit)直到操作成功或者到时间期限后放弃。

BlockingQueue继承了Queue接口,具有队列的特性,同时定义了阻塞方法的通用实现。

BlockingQueue

void put(E e) 将特定元素插入阻塞队列,如果当前队列空间不够则等待知道队列有足够的存储空间
boolean offer(E e, long timeout, TimeUnit unit) 将特定元素插入阻塞队列,如果当前队列空间不够则等待知道队列有足够的存储空间,或者等待时间达到timeout后放弃操作
E take() 查找并且移除队列的头部元素,或者等待知道队列中有元素
E poll(long timeout, TimeUnit unit) 查找并且移除队列的头部元素,或者等待知道队列中有元素,或者等待时间达到timeout后放弃操作
int drainTo(Collection< ? super E> c) 将队列中的元素全部删除并且添加到集合c,如果发生异常,可能会出现一个元素同时存在队列和集合c的情况
int drainTo(Collection< ? super E> c, int maxElements) 将队列中的元素删除并且添加到集合c,最多不超过maxElements,如果发生异常,可能会出现一个元素同时存在队列和集合c的情况

BlockingQueue的实现类可以参考:Java多线程15:Queue、BlockingQueue以及利用BlockingQueue实现生产者/消费者模型

查看评论

七,Java集合类(5)——Queue接口及其实现类

Queue集合Queue用于模拟队列数据结构,采用“先进先出”的方式。Queue接口是继承了Collection的接口,而Queue接口下面的实现类是PriorityQueue,继承的接口是Deque...
  • u010871004
  • u010871004
  • 2016-09-21 09:03:41
  • 6873

集合框架之Queue接口

在处理元素前用于保存元素的collection。除了基本的 Collection 操作外,队列还提供其他的插入、提取和检查操作。每个方法都存在两种形式:一种抛出异常(操作失败时),另一种返回一个特殊值...
  • u012152619
  • u012152619
  • 2015-01-29 08:34:32
  • 1951

java集合(四)——集合 Queue

java集合(四)——集合 Queue原博地址今天我们来介绍下集合Queue中的几个重要的实现类。关于集合Queue中的内容就比较少了。主要是针对队列这种数据结构的使用来介绍Queue中的实现类。Qu...
  • sinat_35209943
  • sinat_35209943
  • 2017-08-13 14:18:34
  • 97

Java集合(三):Queue队列

前面介绍了列表,其中包括List接口和LinkedList链表和ArrayList数组列表。这节介绍一个也很常见的数据结构:队列。 我们知道,队列是一个可以从尾部添加新元素、从头部删除元素的数据结构。...
  • u012877472
  • u012877472
  • 2016-04-13 17:03:38
  • 6527

JAVA集合类--几种特殊的Queue

一、优先级队列 百度百科定义: 优先级队列 是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。 维基百科的定义也可以看看:https://en.wikipedia.or...
  • beautiful_face
  • beautiful_face
  • 2017-08-04 20:42:21
  • 211

Java 集合深入理解(9):Queue 队列

什么是队列队列是数据结构中比较重要的一种类型,它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。队列有两种: 单队列 循环队列 单队列就是常见的队列, 每次添加元...
  • u011240877
  • u011240877
  • 2016-10-19 16:45:19
  • 10583

Java类集框架——LinkedList子类与Queue接口

学习目标: 掌握LinkedList与List接口的关系。 掌握Queue接口的作用。 LinkedList子类与Queue接口 LinkedList表示的是一个链表的操作类,此类的定义如下:...
  • u013087513
  • u013087513
  • 2016-08-16 14:31:43
  • 1604

Java集合框架详解之继承queue接口

趁着最近比较闲,静下心来准备把关于集合框架的东西好好整理一下,边学边整理。近阶段先是整理整体的知识点,一些接口,一些继承类以及它们的特性,用法,后续还会有一些常用的,比较重要的类的jdk源码剖析。Ja...
  • JasonZhangOO
  • JasonZhangOO
  • 2017-02-19 19:55:01
  • 558

Java:常用集合类(List、Map、Set、Queue、Stack)

迭代器基本概念Iterator接口包含3个方法:public interface Iterator { E next(); boolean hasNext(); void re...
  • jinzhao1993
  • jinzhao1993
  • 2016-10-07 07:54:26
  • 891

Java集合之Queue和Deque接口

public interface Queue extends Collection {//队列 JDK1.7 java.util //一些队列有大小限制,因此如果想在一个满的队列中加入一个...
  • Hello_zihan
  • Hello_zihan
  • 2016-11-01 17:18:13
  • 326
    个人资料
    等级:
    访问量: 6174
    积分: 245
    排名: 31万+
    文章存档