这一章节我们来讨论一下队列(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. ACM_Mystery

    Mystery Time Limit: 2000/1000ms (Java/Others) Problem Description: No Description Input: The first l ...

  2. [转]Android监听ListView里Button事件

    本文转自:http://blog.csdn.net/lovediji/article/details/6753349 public View getView(int position, View co ...

  3. Redis 的简单运算

    Redis 的简单运算 命令 说明 备注 incr key 在原字段上加 1 只能对整数操作 incrby key increment 在原字段上加上整数 (increment) 只能对整数操作 de ...

  4. WinForm 之 使用ListView控件展示数据

    在学习了这么多的WinForm基本控件后,今天在来学习一个比较有意思的包含图片的控件! >>>图像列表控件 ImageList是含有图像对象的集合,可以通过索引或关键字引用该集合中的 ...

  5. Java引用jar的优化

    一般java的类文件开头都是各种引用: 如 上图的引用可以写成

  6. JS高级——instanceof语法

    基本语法 对象 instanceof 构造函数 基本使用 <script> function Person() { } //p--->Person.prototype--->O ...

  7. 移动web——bootstrap媒体对象

    基本模板 1.这些组件都具有在文本内容的左或右侧对齐的图片(就像博客评论或 Twitter 消息等) <div class="media"> <div class ...

  8. [Windows Server 2008] 查看PHP详细错误信息

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:查看IIS ...

  9. (转)Arcgis for javascript实现百度地图ABCD marker的效果

    概述: 在我的博客中,有一篇相关的文章,这段时间,有很多人问我求源码,只是时间过去已长,源代码已找不到,乘着这个9.3放假,又重新实现了下,并相关代码做了优化,在此贴出来,方便大家使用. 相关文章地址 ...

  10. java_File对象

    package File; import java.io.File; import java.io.IOException; public class file { public static voi ...