这一章节我们来讨论一下队列(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. 网络简要<入门篇>

    OSI七层 网络的含义:两个不在同一地理位置的主机(终端),通过传输介质和通信协议,实现通信和资源共享. 网络四要素:终端,传输介质 ,通信协议,资源 网络分类: 以范围分类:LAN网(局域网,以太网 ...

  2. 数据库部署到linux服务器,供本地访问。

    1.  将本地的sql文件上传至服务器 scp /Users/fangke/Documents/article.sql root@IP:/usr/local 2. 登陆服务器的mysql 3. 创建数 ...

  3. Codeforces Round 411 Div.2 题解

    A Fake NP standard input/output s, MB Submit Add to favourites x3673 B -palindrome standard input/ou ...

  4. BZOJ 4173 数论

    思路: $(m%k+n%k>=k) *phi(k)$ $我们不妨设n=q_1k+r_1 m=q_2k+r$2 $n+m=(q_1+q_2)k+r1+r2$ ${\lfloor}\frac{n+m ...

  5. sikuli--前端自动化操作的神器

    前端自动话操作应用很广泛,从网购秒杀活动实现自动化抢购,到区块链货币高频交易前端脚本编写(非合作交易所不提供api的情况下). 自动化的流派分为2类,一类是对DOM对象进行解析的,这个是主流,但是受特 ...

  6. 数字签名与数字证书以及https

    数字签名与数字证书以及httpshttps://blog.csdn.net/lzghxjt/article/details/79604602

  7. 话说:Hibernate二级缓存

    Hibernate缓存分类: 一.Session缓存(又称作事务缓存):Hibernate内置的,不能卸除. 缓存范围:缓存只能被当前Session对象访问.缓存的生命周期依赖于Session的生命周 ...

  8. pd_ds 之 hash

    http://attack.cf/?post=23 打个广告....

  9. 用CSS样式写选择框右侧小三角

    直接上代码! <!DOCTYPE html><html lang="en"><head> <title>小三角</title& ...

  10. Echarts 出现不明竖线解决方案

    Echarts出现了不明竖线,百思不得其解.去查相应的解决方案也没有找到. 后来自己点来点去,突然感觉像是上一个Echarts遗留的. 然后去Echarts官网看到了 clear()方法,这个方法可以 ...