java 数据类型:集合接口Collection之队列Queue:PriorityQueue ;Dequeue接口和ArrayDeque实现类:
什么是Queue集合:

Queue接口定义了如下几个方法:
- void add(Object e):将制定的元素加入队列的尾部
- Object element(): 获取队列的头部元素,但不要删除改元素
- boolean offer(Object e): 将制定元素加入此队列的尾部。当使用有容量限制的队列的时候,该方法比add方法更好
- Object peek() : 获取队列头部的元素,但是不删除,如果队列为空,那么返回null
- Object remove(): 获取队列头部的元素,并删除该元素
- Object poll(): 获取并删除元素的头部的元素,如果队列为空,返回null
PriorityQueue实现类:
如何排序(同TreeSet):
- 自然排序:每个队列存放的元素都必须实现Comparable这个接口
- 定制排序,初始化PriorityQueue的时候,必须传入一个Comapator对象
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue; /**
* @ClassName PriorityQueueExample
* @projectName: object1
* @author: Zhangmingda
* @description: PriorityQueue 是Queue接口的实现类,队列内的元素会有优先级之分,并不是先进先出
* date: 2021/4/10.
*/
public class PriorityQueueExample {
public static void main(String[] args) {
Queue queue = new PriorityQueue();
queue.add(3);
queue.add(33);
queue.add(32);
queue.add(-1);
queue.add(-9);
System.out.println(queue); //[-9, -1, 32, 33, 3]
Queue queue1 = new PriorityQueue((o, t1) -> (int) t1 - (int)o);
queue1.add(3);
queue1.add(33);
queue1.add(32);
queue1.add(-1);
queue1.add(-9);
System.out.println(queue1); //[33, 3, 32, -1, -9]
}
}
对象定制排序
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue; /**
* @ClassName PriorityQueueExample
* @projectName: object1
* @author: Zhangmingda
* @description: PriorityQueue 是Queue接口的实现类,队列内的元素会有优先级之分,并不是先进先出
* date: 2021/4/10.
*/
public class PriorityQueueExample {
public static void main(String[] args) {
class User implements Comparable{
int age; public User(int age) {
this.age = age;
} @Override
public int compareTo(Object o) { return this.age - ((User)o).age;
} @Override
public String toString() {
return "User{" +
"age=" + age +
'}';
}
} Queue queue2 = new PriorityQueue();
queue2.offer(new User(32));
queue2.offer(new User(12));
queue2.offer(new User(48));
queue2.offer(new User(8));
System.out.println(queue2); //[User{age=8}, User{age=12}, User{age=48}, User{age=32}]
}
}
Deque接口和ArrayDeque实现类:
- 添加元素可以选择从前或后都可
- void addFirst(Object o):将指定的元素插入到双端队列的开头
- void addLast(Object o):将指定的元素插入该双端队列的末尾
- boolan offerFirst(Object e): 将指定元素插入该双端队列的开头
- boolan offerLast(Object e): 将指定元素插入到双端队列的末尾
- Iterator descendingIterator():返回该双端队列对应的迭代器,该迭代器将以逆向顺序来迭代代码中的元素。
- Object getFirst(): 获取但不删除双端队列的第一个元素
- Object getLast(): 获取但不删除双端对垒的最后一个元素
- Object peekFirst(): 获取但不删除该双端队列的第一个元素,如果此双端队列为空,那么返回null
- Object peekLast(): 获取但不删除该双端队列的最后一个元素,如果此双端队列为空,那么返回null
- Object pollFirst(): 获取并删除该双端队列的第一个元素,如果双端队列为空,那么返回null
- Object pollLast():获取并删除该双端队列的最后一个元素,如果此双端队列为空,那么返回null
栈方式增删(先进后出):
- void push(Object e): 将一个元素push进该双端队列所表示的栈的栈顶。相当于addFirst()
- Object pop() 栈方法 : pop出双端队列所表示的栈的栈顶的元素。相当于removeFirst();
import java.util.ArrayDeque;
import java.util.Queue; /**
* @ClassName ArrayQueueExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/10.
*/
public class ArrayQueueExample {
public static void main(String[] args) {
ArrayDeque stack = new ArrayDeque();
stack.push("张三");
stack.push("李四");
stack.push("老刘");
System.out.println(stack);
System.out.println(stack.size());
int count = stack.size(); //注意:为什么不直接放到for循环里面?size()是变化的:因为for循环过程中pop后size()的值就变小了,
for(int i=0; i<count; i++){
String s = (String)stack.pop();
System.out.println(s);
}
/**
* 老刘
* 李四
* 张三
*/
}
}
import java.util.ArrayDeque;
import java.util.Queue; /**
* @ClassName ArrayQueueExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/10.
*/
public class ArrayQueueExample {
public static void main(String[] args) {
Queue queue = new ArrayDeque();
queue.offer("张三");
queue.offer("老李");
queue.offer("老王");
int counts = queue.size();
for(int i=0; i<counts; i++){
String s = (String)queue.poll();
System.out.println(s);
}
/** 队列先进先出,后进后出
* 张三
* 老李
* 老王
*/
}
}
descendingIterator(): ArrayDeque特有逆向迭代器,逆向取对象
ArrayDeque queue2 = new ArrayDeque();
queue2.offer("张三");
queue2.offer("老李");
queue2.offer("老王");
Iterator iterator = queue2.descendingIterator(); //ArrayDeque特有逆向迭代器
while (iterator.hasNext()){
System.out.println(iterator.next());
}
/** ArrayDeque特有逆向迭代器,逆向取对象
* 老王
* 老李
* 张三
*/
LinkedList:
- LinkedList是同时实现List接口和Deque接口的实现类,因此LinkedList可以被当做栈和队列来使用。
- 底层数据结构是双向链表,访问慢、添加删除效率高
java 数据类型:集合接口Collection之队列Queue:PriorityQueue ;Dequeue接口和ArrayDeque实现类:的更多相关文章
- Java:集合,Collection接口框架图
Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...
- Java自学-集合框架 Collection
Java集合框架 Collection Collection是一个接口 步骤 1 : Collection Collection是 Set List Queue和 Deque的接口 Queue: 先进 ...
- [Java复习] 集合框架 Collection
Q1 Collection java的集合以及集合之间的继承关系? 数组和链表的区别? 固定长度,连续内存,不能扩展,随机访问快,插入删除慢.链表相反 List, Set, Map的区别? List, ...
- java学习——集合框架(Collection,List,Set)
集合类的由来: 对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就使用集合容器进行存储. 集合特点:1,用于存储对象的容器.2,集合的长度是可变的.3,集合中不可以存储基本数据类型值. ...
- 【Java】集合概述Collection、Map
Java集合分为Collection和Map,Collection又分为List.Set. List中有ArrayList.LinkedList和Vector:Set中又分为HashSet和TreeS ...
- Java多线程总结之线程安全队列Queue
在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列.Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非 ...
- 【java】Java多线程总结之线程安全队列Queue【转载】
原文地址:https://www.cnblogs.com/java-jun-world2099/articles/10165949.html ============================= ...
- Java数据结构与算法(4) - ch04队列(Queue和PriorityQ)
队列: 先进先出(FIFO). 优先级队列: 在优先级队列中,数据项按照关键字的值有序,关键字最小的数据项总在对头,数据项插入的时候会按照顺序插入到合适的位置以确保队列的顺序,从后往前将小于插入项的数 ...
- Java精选笔记_集合概述(Collection接口、Collections工具类、Arrays工具类)
集合概述 集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体.集合被用于存储.获取.操纵和传输聚合的数据. 使用集合的技巧 看到Array就是数组结构,有角标,查询速 ...
随机推荐
- idea解决Command line is too long. Shorten command line for ServiceStarter or also for Application报错
找到 .idea\workspace.xml: 找到<component name="PropertiesComponent">,在里面添加<property n ...
- javascript-初级-day07
day01-运算符 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...
- Kubernetes(K8s)极速入门
1. 概述 老话说的好:努力学习,努力提高,做一个有真才实学的人. 言归正传,之前我们聊了 如何使用国内的镜像源搭建 kubernetes(k8s)集群 ,今天我们来聊聊如何在 kubernetes( ...
- Rainbond通过插件整合SkyWalking,实现APM即插即用
作者:张震 一. 简介 SkyWalking 是一个开源可观察性平台,用于收集.分析.聚合和可视化来自服务和云原生基础设施的数据.支持分布式追踪.性能指标分析.应用和服务依赖分析等:它是一种现代 AP ...
- 从头带你撸一个Springboot Starter
我们知道 SpringBoot 提供了很多的 Starter 用于引用各种封装好的功能: 名称 功能 spring-boot-starter-web 支持 Web 开发,包括 Tomcat 和 spr ...
- NOIp2021 原地退役记
JS-0013 Day -2 - 2021.11.17 打了场 cmd_blk 出的模拟赛,T2 T3 都是做过的原题(AGC010C & ARC092D),于是直接摆烂交暴力垫底,成功为我的 ...
- SP20173 DIVCNT2 - Counting Divisors (square)
Refer 主要思路参考了 Command_block 的题解. Description 给定 \(n\)(\(n\le 10^{10}\)),求 \[\sum_{i=1}^n\sigma_0(i^2 ...
- expr判断文件名以固定格式结尾
#!/bin/bash if expr "$1" : ".*\.sh" &>/dev/null then echo "okok" ...
- R语言与医学统计图形-【19】ggplot2坐标轴调节
ggplot2绘图系统--坐标轴调节 scale函数:图形遥控器.坐标轴标度函数: scale_x_continous scale_y_continous scale_x_discrete scale ...
- Markdown—.md文件是什么?怎么打开?
md全称markdown,markdown也是一种标记语言. md文件其实可以用常用的文本编辑器都可以打开. 用记事本打开,把markdown文件拖到记事本图标上就可以打开 . 用 subli ...