开发者学堂课程【Java高级编程:Queue 队列】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/20/detail/423
Queue 队列
内容简介:
1、Queue 队列的概念
2、Queue 队列的操作形式
3、PriortyQueue 优先级队列的实现
1、Queue 队列
Queue 描述的是一个队列,主要特点是实现先进先出的操作形式。
基本的操作形式:Queue 有两个端点。一端是队尾,一端是队头或队首,所有的操作数据都是通过队首一个一个的往里输入,这是队列的一个操作的本质,在实际的处理操作过程之中,有两个操作形式。
例如:一个人在队首进行数据获取,充当消费者的身份,另外一个人要在队尾进行数据生产,充当生产者的身份。
在追加队列的整个处理操作过程之中,生产者不用等消费者,可以一直生产数据,但是消费者依然去等待生产者。
如果将队列应用在多线程的”生产者与消费者”模型处理上,对于生产者生产过快的情况下,生产者就没有必要等待消费者获取数据,可以将所有的内容直接保存在队列之中。队列跟栈的最大的差别在于队列中数据的先进先出,而栈中是先进后出。
队列实现可以使用我们的 LinkedList 的子类来完成,观察这个类的定义。
LinkedList 子类的特别的继承结构,在整个操作过程之中,Queue 实现了一个 List队列,队列的操作形式跟大部分的数据处理环境非常的类似。
队列的主要依靠 Queue 接口之中提供的方法来处理,提供有如下的方法:
向我们的队列之中追加数据:public boolean offer(E e)
可以直接用 add()方法;
通过我们的队列获取数据:public E poll()
,弹出后删除数据。
2、Queue 队列的操作形式
范例:实现队列操作
1 1、
2 package cn. mldn. demo;
3
4 import java. util.
LinkedList
;
5 import java. util. Queue;
6
7 public class JavaAPIDemo {
8 public, static void main(String[] args) throwsException{
9 Queuequeue=newLinkedList() ;
10 queue .offer("X") ; // 追加队列数据,通过队尾11 追加
11 queue.offer("A") ; // 追加队列数据,通过队尾追加
12 queue.offer("Z") ; // 追加队列数据,通1过队尾追加
13 System. out. println(queue.poll()); //弹出数据、X
14 System. out . print1n(queue.poll()); //弹出数据、A
15 System. out . println(queue.pol1()); //弹出数据、Z
16 }
17}
18
19 2、
X
A
Z
在整个过程里面,Queue 实现了基础的先进先出的操作效果。
3、PriortyQueue 优先级队列的实现
除了 LinkedList 的子类,还有一个叫优先级队列的概念。可以使用 PriortyQueue 实现优先级队列(比较功能)。
有排序操作的,一定跟 Comparable 接口有直接的对应关系,只有接口之后才好确定优先级的设置问题。
这叫做优先级队列的操作处理,在开发过程中可以选用 Queue也可以选用 PriortyQueue。
范例:使用优先级队列
1 1、
2 package cn. mldn. demo;
3
4 import java. util.
PriortyQueue
;
5 import java. util. Queue;
6
7 public class JavaAPIDemo {
8 public, static void main(String[] args) throwsException{
9 Queuequeue=newLinkedList() ;
10 queue .offer("X") ; // 追加队列数据,通过队尾11 追加
11 queue.offer("A") ; // 追加队列数据,通过队尾追加
12 queue.offer("Z") ; // 追加队列数据,通1过队尾追加
13 System. out. println(queue.poll()); //弹出数据、X
14 System. out . print1n(queue.poll()); //弹出数据、A
15 System. out . println(queue.pol1()); //弹出数据、Z
16 }
17}
18
19 2、
A
X
Z
对于队列的选用原始则要根据实际的项目环境来决定的。