7、Queue

本文介绍了队列数据结构的基本概念及应用,包括FIFO队列和优先级队列的实现方式,如LinkedList和PriorityQueue。此外,还详细讨论了并发场景下的阻塞队列(BlockingQueue)及其几种实现,如LinkedBlockingQueue、ArrayBlockingQueue等。

Queue集合的作用

Queue用于模拟队列这种数据结构。队列通常是指“先进先出(FIFO)”的容器。

队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素。新元素插入到队列的尾部,取出元素会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。

Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。

队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞.在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可 以定期地把中间结果存到阻塞队列中而其他工作者线线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行得比第二个慢,则第二个 线程集在等待结果时就会阻塞。如果第一个线程集运行得快,那么它将等待第二个线程集赶上来。

Queue接口中定义了的方法:

  • object element():获取队列头部的元素,但是不删除该元素。
  • boolean offer(Object e):将指定的元素插入此队列的尾部。当使用容量有限的队列时,此方法通常比add(Object e)有效。
  • Object peek():返回队列头部的元素,但是不删除该元素。
  • Object poll():返回队列头部的元素,并删除该元素。

AbstractQueue

对Queue的方法进行简单的包装

实现

Queue的实现可以划分为通用实现和并发实现

通用实现主要有两个,一个是LinkedList,一个是PriorityQueu。

LinkedList,它继承自Queue接口,提供FIFO的队列操作形式.

PriorityQueue是一个基于栈结构的优先度队列,它可以根据元素的自然排序或者给定的排序器进行排序.

在java.util.concurrent包中包含了一系列的同步Queue接口和实类.BlockingQueue继承自Queue,它会在检索元素时等待队列是非空队列处于可用状态,并在存入一个元素后将状态更改为可用状态,下面是它的实现类.

  • LinkedeBlockingQueue—基于链接节点的可选有界FIFO方式阻塞式队列

  • ArrayBlockingQueue—基于数组的有界FIFO方式的阻塞式队列

  • PriorityBlockingQueue—基于栈结构无界阻塞式队列
  • DelayQueue—基于栈结构的时间调度队列
  • SychronousQueue—通过使用BlockingQueue接口的简单对接机制的队列
  • LinkedTransferQueue—基于链接节点的无界TransferQueue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值