李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
持有对象--Queue
Leefs
2019-12-09 AM
4608℃
3条
# 持有对象--Queue ### 前言 本篇讲述《Java编程思想》第11.11节,Queue ### 一、概念 **Queue即队列,是一个典型的先进先出(FIFO)的容器**。即从容器的一端放入事物,从另一端取出事物,并且事物放入容器的顺序与取出的顺序是相同的。 **队列常被当作一种可靠的将对象从程序的某个区域传输到另一个区域的途径。** 因为队列可以安全地将对象从一个任务传输给另一个任务,所以队列在并发编程中特别重要。 LinkedList提供了方法以支持队列的行为,并且它实现了Queue接口,因此LinkedList可以用作Queue的一种实现。通过将LinkedList向上转型为Queue。 下面示例使用了在Queue接口中与Queue相关的方法: ```java public class QueueDemo { public static void printQ(Queue queue){ while(queue.peek() != null){ System.out.print(queue.remove()+" "); } System.out.println(); } public static void main(String[] args) { Queue
queue = new LinkedList
();//向上转型 Random random = new Random(47); for(int i=0;i<10;i++){ queue.offer(random.nextInt(i + 10)); } printQ(queue); Queue
qc = new LinkedList
(); for(char c :"Brontosaurus".toCharArray()){ qc.offer(c); } printQ(qc); } } ``` > 运行结果 ```java 8 1 1 1 5 14 3 1 0 1 B r o n t o s a u r u s ``` > 参数说明 offer():在允许的情况下,将一个元素插入到队尾,或者返回false。 peek()和element()都将在不移除的情况下返回队头,但是peek()方法在队列为空时返回null,而element()会抛出NoSuchElementException异常。 poll()和remove()方法将移除并返回队头,但是poll()在队列为空时返回null,而remove()会抛出NoshElementException异常。 自动包装机制会自动地将nextInt()方法的int结果转换为queue所需的Integer对象,将char c转换为qc所需的Character对象。Queue接口窄化了对LinkedList的方法的访问权限,以使得只有恰当的方法才可以使用,因此,你能够访问的LinkedList的方法会变少(这里你实际上可以将queue转型回LinkeList,但是至少我们不鼓励这么做)。 ### 练习题 ```java 写一个称为Command的类,它包含一个String域和一个显示该String的operation()方法。写第二个类,它具有一个使用Command对象来填充一个Queue并返回这个对象的方法。将填充后的Queue传递给第三个类的一个方法,该方法消耗掉Queue中的对象,并调用它们的operation()方法。 ``` > 代码 ```java class Command{ private final String cmd; Command(String cmd){ this.cmd = cmd; } void operator(){ System.out.println(cmd); } } class Producer{ public static void produce(Queue
q){ q.offer(new Command("load")); q.offer(new Command("delete")); q.offer(new Command("save")); q.offer(new Command("exit")); } } class Consumer{ public static void consume(Queue
q){ while(q.peek() != null){ q.remove().operator(); } } } public class QueueTest01 { public static void main(String[] args) { // TODO Auto-generated method stub Queue
cmds = new LinkedList
(); Producer.produce(cmds); Consumer.consume(cmds); } } ``` > 运行结果 ```java load delete save exit ```
标签:
Java
,
Java编程思想
,
JavaSE
,
持有对象
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/268.html
上一篇
【转载】多线程并发问题
下一篇
持有对象--PriorityQueue
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
字符串
Netty
高并发
MySQL
持有对象
Java
Flink
序列化和反序列化
Linux
Tomcat
Ubuntu
Zookeeper
Beego
SpringCloudAlibaba
Kibana
JavaWEB项目搭建
Livy
Java阻塞队列
Redis
Yarn
锁
Java工具类
BurpSuite
FileBeat
MyBatis-Plus
Spark Core
数学
Hadoop
Elasticsearch
RSA加解密
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭