这一章节我们来讨论一下队列(Queue)。

1.什么是队列?

队列是一种特殊的线性表,特殊之处在于它仅仅同意在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样。队列是一种操作受限制的线性表。

2.特性

(1)元素是有序的

(2)元素是先进先出

3.java里面的实现类:Linkedlist和PriorityQueue,两者之间性能不存在区别,区别的地方是排序的行为。

package com.ray.ch14;

import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue; public class Test { public static <T> void test(Queue<T> queue, Generator<T> generator,
int count) {
for (int i = 0; i < count; i++) {
queue.add(generator.next());
}
while (queue.peek() != null) {
System.out.print(queue.remove() + " ");
}
System.out.println();
} public static void main(String[] args) {
test(new LinkedList<String>(), new MyGenerator(), 10);
test(new PriorityQueue<String>(), new MyGenerator(), 10);
}
} interface Generator<T> {
T next();
} class MyGenerator implements Generator<String> {
private String str = "one two three four five six seven eight nine ten eleven"; private int index = 0; @Override
public String next() {
if (index > str.split(" ").length) {
return "";
} else {
return str.split(" ")[index++];
}
}
}

输出:

one two three four five six seven eight nine ten
eight five four nine one seven six ten three two

4.优先级队列

排序对象实现Comparable接口就可以。

package com.ray.ch14;

import java.util.PriorityQueue;
import java.util.Random; public class Test { private static PriorityQueue<MyClass> priorityQueue = new PriorityQueue<MyClass>(); public static PriorityQueue<MyClass> test(int count) {
for (int i = 0; i < count; i++) {
priorityQueue.add(new MyClass(new Random().nextInt(10)));
}
return priorityQueue;
} public static void main(String[] args) {
System.out.println(test(10));
}
} class MyClass implements Comparable<MyClass> {
private int pri = 0; public MyClass(int pri) {
this.pri = pri;
} @Override
public int compareTo(MyClass myClass) {
if (this.pri < myClass.pri) {
return -1;
} else {
if (this.pri == myClass.pri) {
return 0;
} else {
return 1;
}
}
} @Override
public String toString() {
return this.pri + "";
}
}

输出:

[0, 1, 3, 3, 2, 5, 5, 6, 6, 7]

5.双向队列

特点:能够在不论什么一段加入或者删除元素。

因为在现有的java 里面没有实现双向队列的接口。可是在Linkedlist里面事实上已经模拟出来了。因此我们使用组合来模拟一下。

class Deque<T> {
private LinkedList<T> linkedList = new LinkedList<T>(); public void addFirst(T t) {
linkedList.addFirst(t);
} public void addLast(T t) {
linkedList.addLast(t);
} public void removeFirst() {
linkedList.removeFirst();
} public void removeLast() {
linkedList.removeLast();
}
}

总结:这一章节主要讲述队列的概念、特点。以及优先级和双向队列。

这一章节就到这里,谢谢。

-----------------------------------

文件夹

从头认识java-15.6 队列(Queue)的更多相关文章

  1. Java中的队列Queue,优先级队列PriorityQueue

    队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...

  2. Java 中的队列 Queue

    一.队列的定义 我们都知道队列(Queue)是一种先进先出(FIFO)的数据结构,Java中定义了java.util.Queue接口用来表示队列.Java中的Queue与List.Set属于同一个级别 ...

  3. Java线程安全队列Queue实现原理

    原文链接:https://www.cnblogs.com/DreamRecorder/p/9223016.html 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列.J ...

  4. Java中使用队列Queue

    示例代码: Queue<Integer> queue = new LinkedList<Integer>(); for (int i = 1; i <= 100; i + ...

  5. 0032ActiveMQ之java编码实现生产者和消费者操作队列queue

    今天学习了入门级的用java编写生产者producer和消费者consumer操作activemq的queue队列,为了之后复习回顾,现做整理如下: maven工程的搭建此处不再讲解,在maven工程 ...

  6. java队列queue的我觉得很好的使用方式

    LinkedList实现了queue接口,通常使用LinkedList 其中关键两个函数:offer().poll() offer()表示“排队”----插入到队列最前,poll()表示轮到了队列最前 ...

  7. 【Java源码】集合类-队列Queue

    一.描述 队列Queue这种数据结构,通常指先进先出(FIFO)这种容器.可以模拟生活中依次排队这种场景. 下面是集合体系继承树: 二.Queue Queue和List一样都是Collection的子 ...

  8. Java Redis+Spring-data-redis 队列 单机版

    1.redis.properties ##redisIP地址 #redis.host=10.14.2.212 redis.host=127.0.0.1 ##redis默认端口号 redis.port= ...

  9. 映射Map、队列Queue、优先级队列PriorityQueue

    映射Map 将对象映射到其他对象的能力是解决编程问题的有效方法.例如,考虑一个程序,它被用来检查 Java 的 Random 类的随机性.理想情况下, Random 会产生完美的数字分布,但为了测试这 ...

  10. Java:阻塞队列

    Java:阻塞队列 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. 概述 概念 队列 队列就可以想成是一个数组,从一头进入,一头出去,排队买饭 阻塞队列 B ...

随机推荐

  1. Springboot2.0部署阿里云服务器(nginx+域名+SSL)供Http和Https访问

    总算是弄出来了,先写下来供自己以后查阅. 1)首先你要有一个阿里云服务器,我用的是Centos7学生认证,10元/月,很便宜也很好用. 2)购买了域名,首年9元,很划算.域名买来之后经历了拍照备案,前 ...

  2. Zookeeper概念学习系列之zookeeper的节点

    znode有两种类型:  临时节点(ephemeral  node) 和 持久节点(persistent node). znode的类型在创建时确定并且之后不能再修改. 短暂znode的客户端会话结束 ...

  3. Ambari架构及安装

    不多说,直接上干货! 1.什么是Ambari? 2.Ambari项目是由哪几部分构成的? 3.Ambari系统架构是如何组成的? 前言 Hadoop集群的管控一直是一个热门的话题,对于这样的一个应用场 ...

  4. Unicode gbk gb2312 编码问题 [转载]

    原文地址: http://www.cnblogs.com/csn0721/archive/2013/01/24/2875613.html HTML5 UTF-8 中文乱码   <!DOCTYPE ...

  5. 自学Python十二 战斗吧Scrapy!

    初窥Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 还是先推荐几个学习的教程:Scrapy 0.2 ...

  6. Android开发高手课 - 02 崩溃优化(下):应用崩溃了,你应该如何去分析?

    崩溃现场 1. 崩溃信息 进程名.线程名 崩溃类型和堆栈信息 2. 系统信息 Logcat 机型.系统.厂商.CPU.ABI.Linux 版本等 设备状态:是否 root.是否模拟器.是否有 Xpos ...

  7. JS高级——面向对象方式解决tab栏切换问题

    注意事项 1.给li元素注册事件,函数里面的this指的li元素,那么我们可以在注册事件之前将Tab对象用that=this进行保存 2.使用沙箱模式,所以暴露给外面的变量使用的是window.tab ...

  8. 使用FastReport的BarCode2D控件生成含中文的PDF417条形码

    解决方法:设定CodePage为936 FastReport用户手册中关于CodePage的说明: CodePage This property is specific to the PDF417 a ...

  9. nc的简单使用

    1.传输文件: 目的主机监听 nc -l 监听端口<未使用端口>  > 要接收的文件名 nc -l 6666 > filename.tar 源主机发起请求 nc  目的主机ip ...

  10. makefile 与 make

    所要完成的Makefile 文件描述了整个工程的编译.连接等规则.其中包括:工程中的哪些源文件需要编译以及如何编译.需要创建那些库文件以及如何创建这些库文件.如何最后产生我们想要的可执行文件.尽管看起 ...