Java基础(十八)集合(5)Queue集合
队列是只能在尾部添加元素,同时只能在头部删除元素的数据结构。队列的原则就是“先进先出”。
Queue接口是Collection接口的最后一个子接口。
Queue接口是队列接口,而Deque接口是Queue接口的子接口,可以用来实现双端队列,让人们有效地在头部和尾部同时添加或删除元素。
ArrayDeque和LinkedList都实现了Deque接口。
实现了Queue接口的类有两种:ArrayDeque类和PriorityQueue类。
队列一般有两种实现方式,数组队列和链表队列。
如果需要一个循环数组队列,就可以使用ArrayDeque类;如果需要一个链表队列,就直接使用LinkedList类,这个类实现了Queue接口。
1.ArrayDeque(循环数组队列)
创建一个ArrayDeque对象:
ArrayDeque<String> aDeque = new ArrayDeque<>();
方法测试:
package queue.jun.iplab; import java.util.ArrayDeque;
import java.util.Iterator; public class ArrayDequeTest { public static void main(String[] args) { String a = "A", b = "B", c = "C", d = "D", e = "E";
ArrayDeque<String> aDeque = new ArrayDeque<>();
aDeque.add(a);
aDeque.add(b);
aDeque.addFirst(c);
aDeque.addLast(d);
System.out.println(aDeque.isEmpty()); // 打印:false Iterator<String> it = aDeque.iterator();
while (it.hasNext()) { // 打印:(队头)C A B D
String string = (String) it.next();
System.out.print(string + " ");
}
System.out.println(); System.out.println(aDeque.poll()); // 打印:C
System.out.println(aDeque.peek()); // 打印:A
System.out.println(aDeque.peekLast()); // 打印:D
System.out.println(aDeque.pop()); // 打印:A Iterator<String> it_1 = aDeque.iterator();
while (it_1.hasNext()) { // 打印:B D
String string = (String) it_1.next();
System.out.print(string + " ");
}
}
}
2.PriorityQueue(高效删除最小元素队列)
优先级队列中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索。
优先级队列使用了堆,对二叉树进行添加和删除操作,可以让最小的元素移动到根,而不必花费时间对元素进行排序。
与TreeSet一样,一个优先级队列既可以保存实现了Comparable接口的类对象,也可以保存在构造器中提供的Comparator对象。
保存在PriorityQueue中的对象必须实现Comparator接口:
public class Person implements Comparable<Object> {
private String name;
private long id_card;
}
以id_card的大小为排序指标,然后重写compareTo方法
// 重写compareTo方法,按照id_card的大小进行比较,如果大的返回1,等于返回0,小于返回-1
@Override
public int compareTo(Object o) {
Person person = (Person) o;
int result = id_card > person.id_card ? 1 : (id_card == person.id_card ? 0 : -1);
return result;
}
创建一个PriorityQueue对象:
PriorityQueue<Person> pQueue = new PriorityQueue<>();
插入五个元素:
Person person1 = new Person("小一", 13311123);
Person person2 = new Person("小二", 13223131);
Person person3 = new Person("小三", 13432412);
Person person4 = new Person("小四", 13621312);
Person person5 = new Person("小五", 13531231);
PriorityQueue<Person> pQueue = new PriorityQueue<>();
pQueue.add(person1);
pQueue.add(person2);
pQueue.add(person3);
pQueue.add(person4);
pQueue.add(person5);
使用迭代器访问时,不是按照元素的排列顺序访问的,而是最先访问最小的元素,然后剩余元素按照插入顺序访问:
Iterator<Person> it = pQueue.iterator();
while (it.hasNext()) {
Person person = (Person) it.next();
System.out.println(person.getName() + " " + person.getId_card());
} 输出:
小二 13223131
小一 13311123
小三 13432412
小四 13621312
小五 13531231
而执行删除操作时,却总是删除掉剩余元素中优先级最小的那个元素。
while (!pQueue.isEmpty()) {
System.out.println(pQueue.remove().getId_card());
}
输出:
13223131
13311123
13432412
13531231
13621312
Java基础(十八)集合(5)Queue集合的更多相关文章
- 黑马程序员 Java基础<十八>---> 网路编程
--------------- ASP.Net+Android+IO开发S..Net培训.期待与您交流! --------------- 第一 概述 一.概述: 1.网络模型:OSI参考模型和TCP ...
- java基础(十八)----- java动态代理原理源码解析
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 静态代理 1.静态代理 静态代理:由程序员创建或特定工 ...
- Java实习生常规技术面试题每日十题Java基础(八)
目录 1.解释内存中的栈(stack).堆(heap)和静态区(static area)的用法. 2.怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串? 3.运行时异常与受检异常有 ...
- java基础-IO流对象之Properties集合
java基础-IO流对象之Properties集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Properties集合的特点 Properties类表示了一个持久的属性集. ...
- Bootstrap <基础十八>面包屑导航(Breadcrumbs)
面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...
- Java基础十二--多态是成员的特点
Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...
- Java基础十--接口
Java基础十--接口 一.接口的定义和实例 /* abstract class AbsDemo { abstract void show1(); abstract void show2(); } 8 ...
- 《java面试十八式》--引子
爪哇城中 “喂,你等等我啊”少女气喘吁吁的喊道 “大小姐,你可快点吧,报名马上就要结束了.” 这是爪哇城一年一度的大选比赛,被选上的人会留下来任职,享有名誉和金钱,所以大家都在积极准备. ...
- Java集合 之 Queue集合
什么是Queue集合? 答:Queue用于模拟队列这种数据结构.队列通常是指“先进先出(FIFO)”的容器.队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素.新元素插入到队列的尾部 ...
- Java——(六)Collection之Queue集合
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Queue集合 Queue集合用于模拟队列这种数据结构,队列通常是指“先进先出‘(FIFO)的容 ...
随机推荐
- opencv图像处理之常见滤波器
图像平滑 Smoothing, also called blurring, is a simple and frequently used image processing operation. 平滑 ...
- 轻松部署calico
一.资源 官方文档 https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/integration 二. ...
- Flask基础(04)-->相关配置参数
# 导入Flask from flask import Flask from flask import config # 创建Flask的应用程序 app = Flask(__name__) #=== ...
- 死磕 java同步系列之终结篇
简介 同步系列到此就结束了,本篇文章对同步系列做一个总结. 脑图 下面是关于同步系列的一份脑图,列举了主要的知识点和问题点,看过本系列文章的同学可以根据脑图自行回顾所学的内容,也可以作为面试前的准备. ...
- 初次接触python时,整理的一些基础操作
1.window下python简单使用 (1).使用工具网址 https://jingyan.baidu.com/article/9f7e7ec0ec2e676f2915545f.html (2).各 ...
- v-text和v-html的区别
一.v-text 用于渲染普通文本,无论何时,绑定的数据对象上 msg属性发生了改变,插值处的内容都会更新. <span v-text="message"></s ...
- Spring Boot 2.x基础教程:Swagger接口分类与各元素排序问题详解
之前通过Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档一文,我们学习了如何使用Swagger为Spring Boot项目自动生成API文档,有不少用户留言问了关于文档 ...
- redis 漏洞造成服务器被入侵-CPU飙升
前言 前几天在自己服务器上搭了redis,准备想着大展身手一番,昨天使用redis-cli命令的时候,10s后,显示进程已杀死.然后又试了几次,都是一样的结果,10s时间,进程被杀死.这个时候我还 ...
- Spark 学习笔记之 distinct/groupByKey/reduceByKey
distinct/groupByKey/reduceByKey: distinct: import org.apache.spark.SparkContext import org.apache.sp ...
- MongoDB 学习笔记之 $push,$each,$slice组合使用
$push使用: 使用$push给数组添加2个新成员 db.ArrayTest.updateOne({ "name" : "Bill"},{$push: {&q ...