从头认识java-15.6 队列(Queue)
这一章节我们来讨论一下队列(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)的更多相关文章
- Java中的队列Queue,优先级队列PriorityQueue
队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...
- Java 中的队列 Queue
一.队列的定义 我们都知道队列(Queue)是一种先进先出(FIFO)的数据结构,Java中定义了java.util.Queue接口用来表示队列.Java中的Queue与List.Set属于同一个级别 ...
- Java线程安全队列Queue实现原理
原文链接:https://www.cnblogs.com/DreamRecorder/p/9223016.html 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列.J ...
- Java中使用队列Queue
示例代码: Queue<Integer> queue = new LinkedList<Integer>(); for (int i = 1; i <= 100; i + ...
- 0032ActiveMQ之java编码实现生产者和消费者操作队列queue
今天学习了入门级的用java编写生产者producer和消费者consumer操作activemq的queue队列,为了之后复习回顾,现做整理如下: maven工程的搭建此处不再讲解,在maven工程 ...
- java队列queue的我觉得很好的使用方式
LinkedList实现了queue接口,通常使用LinkedList 其中关键两个函数:offer().poll() offer()表示“排队”----插入到队列最前,poll()表示轮到了队列最前 ...
- 【Java源码】集合类-队列Queue
一.描述 队列Queue这种数据结构,通常指先进先出(FIFO)这种容器.可以模拟生活中依次排队这种场景. 下面是集合体系继承树: 二.Queue Queue和List一样都是Collection的子 ...
- Java Redis+Spring-data-redis 队列 单机版
1.redis.properties ##redisIP地址 #redis.host=10.14.2.212 redis.host=127.0.0.1 ##redis默认端口号 redis.port= ...
- 映射Map、队列Queue、优先级队列PriorityQueue
映射Map 将对象映射到其他对象的能力是解决编程问题的有效方法.例如,考虑一个程序,它被用来检查 Java 的 Random 类的随机性.理想情况下, Random 会产生完美的数字分布,但为了测试这 ...
- Java:阻塞队列
Java:阻塞队列 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. 概述 概念 队列 队列就可以想成是一个数组,从一头进入,一头出去,排队买饭 阻塞队列 B ...
随机推荐
- sigar的使用
与普通jar包不同,Sigar API还要依赖本地的库文件来进行工作,其中: Windows下Sigar.jar 依赖:sigar-amd64-winnt.dll 或 sigar-x86-winnt. ...
- Linux 命令多到记不住?这个开源项目帮你一网打尽!
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 最近发现了一个 ...
- flask 初始
一.flask安装 这里提供两种安装方式: 第一种: pip3 install flask 第二种: pip3 install -i https://pypi.douban.com/simple/ f ...
- MVC系列学习(十五)-验证码
1.方式一: public class VCode { /// <summary> /// 生成验证码图片 字节数组 /// </summary> /// <return ...
- 10.Nodes and Bindings
节点数据绑定 节点是构成Ventuz场景的基本元素.每个节点既属于图层.也属于层级或内容.既可以在图层编辑器,也可以在层级编辑器或内容编辑器中编辑. 内容节点包括资产描述(如材质.xml文件等).数字 ...
- 【Spring】IOC
浅谈IOC IOC的理论背景 图1:传统系统中,对象之间相互引用的一幅图,在采用面向对象方法设计的软件系统中,它的底层的实现都是由n个对象所组成的,所有的对象通彼此之间的合作最终实现系统的业务逻辑,如 ...
- VC socket api使用引入
1.在创建项目时勾上windows socket api的使用 2.头文件 #pragma comment(lib,"WS2_32.lib") 3.初始化 WSADATA dat ...
- html——导航demo
通过行内块.伪类对导航栏进行设置 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- JS——indexOf replace search
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置 注释:indexOf() 方法对大小写敏感!如果要检索的字符串值没有出现,则该方法返回 -1. 语法:searchvalue, ...
- CNN结构:色彩空间建模-色彩空间分析
原文: 色彩空间基础 好一个NB的知乎专栏:色彩空间基础 第一章:色彩空间基础 关于色彩分析,引出了专门的数学基础.整个过程给出了完备的数学阐述,虽然没有试验数据,论述的相当精彩. 摘抄出一段: 上 ...