什么是队列?
队列是数据结构中比较重要的一种类型(是一种数据结构),它支持 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
网友评论