Queue

作者: 有腹肌的豌豆Z | 来源:发表于2020-08-27 09:23 被阅读0次

什么是队列?
队列是数据结构中比较重要的一种类型(是一种数据结构),它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。

2.什么情况下使用队列?
一般情况下,如果是对一些及时消息的处理,并且处理时间很短的情况下是不需要队列的,直接阻塞式的方法调用就可以了。但是如果在消息处理的时候特别费时间,这个时候如果有新消息来了,就只能处于阻塞状态,造成用户等待。这个时候便需要引入队列了。当接收到消息后,先把消息放入队列中,然后再用新的线程进行处理,这个时候就不会有消息阻塞了。

3.队列介绍,队列有两种:
① 单队列 : 就是常见的队列,每次添加元素时,都是添加对队尾。
② 循环队列

队列是数据结构中比较重要的一种类型,他支持先进先出,跟生活中的排队一样,这一点刚好和Stack(栈)相反。
Android中最熟悉的莫过于MessageQueue了,诺!就像下图这张图一样,从前面拿出来后面塞进去,android中有一个死循环在不停地搞这个事。


简介

  • Java Queue接口是Java Collections Framework的成员。
  • Queue 实现通常不允许插入 null 元素
  • Queue 接口并未定义阻塞队列的方法,而这在并发编程中是很常见的。BlockingQueue 接口定义了那些等待元素出现或等待队列中有可用空间的方法,这些方法扩展了此接口。
  • JDK中并发队列提供了两种实现,一种是高性能队列ConcurrentLinkedQueue,一种是阻塞队列BlockingQueue(7种阻塞队列),两种都继承自Queue。
  • JDK中队列有两大类,一类是双端队列,一类是单端队列。

Java Queue 方法

  • boolean add(E e) //将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。
  • E element() //获取,但是不移除此队列的头。
  • boolean offer(E e) //将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。
  • E peek() //获取但不移除此队列的头;如果此队列为空,则返回 null。
  • E poll() //获取并移除此队列的头,如果此队列为空,则返回 null。
  • E remove() //获取并移除此队列的头。

JDK7提供了7个阻塞队列。分别是

  • ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
  • LinkedBlockingQueue :一个由链表结构组成的可选有界阻塞队列。如果未指定容量,那么容量将等于 Integer.MAX_VALUE。 2 31-1
  • PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
  • DelayQueue:一个使用优先级队列实现的无界阻塞队列,,只有在延迟期满时才能从中提取元素。
  • SynchronousQueue:一个不存储元素、没有内部容量的阻塞队列。
  • LinkedTransferQueue:一个由链表结构组成的无界阻塞TransferQueue队列。
  • LinkedBlockingDeque:一个由链表结构组成的可选范围双向阻塞队列。如果未指定容量,那么容量将等于 Integer.MAX_VALUE。 2 31-1

相关文章

网友评论

      本文标题:Queue

      本文链接:https://www.haomeiwen.com/subject/opyijktx.html