Java容器深入浅出之PriorityQueue、ArrayDeque和LinkedList

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Queue用于模拟一种FIFO(first in first out)的队列结构。一般来说,典型的队列结构不允许随机访问队列中的元素。队列包含的方法为:1. 入队void add(Object o): 指定元素加入队列尾部boolean offer(Object o):同上,在有限容量队列中,此方法更好2.

Queue用于模拟一种FIFO(first in first out)的队列结构。一般来说,典型的队列结构不允许随机访问队列中的元素。队列包含的方法为:

1. 入队

void add(Object o): 指定元素加入队列尾部

boolean offer(Object o):同上,在有限容量队列中,此方法更好

2. 出队

Object poll():获取头部元素,并从队列中删除;如果队列为空,则返回null

Object remove():获取头部元素,并从队列中删除;

3. 出队不删除

Object peek():获取头部元素,不删除;如果队列为空,则返回null

Object element():获取头部元素,不删除;

PriorityQueue

PriorityQueue是Queue接口的实现类,但是它并不是一个FIFO的队列实现,具体表现在:

1. 保存顺序与FIFO无关,而是按照元素大小进行重排序;因此poll出来的是按照有小到大来取。

2. 不允许保存null,排序规则有自然排序和定制排序两种,规则与TreeSet一致。

Deque接口与ArrayDeque实现类

Deque实现的是一个双端队列,因此它具有“FIFO队列”及“栈”的方法特性,其中ArrayDeque是其典型的实现类。

1. ArrayDeque的栈实现

 1 public class ArrayDequeStack {
 2 
 3     public static void main(String[] args) {
 4         ArrayDeque<String> stack = new ArrayDeque<>();
 5         //压栈,此时AAA在最下,CCC在最外
 6         stack.push("AAA");
 7         stack.push("BBB");
 8         stack.push("CCC");
 9         System.out.println(stack);
10         //获取最后添加的元素,但不删除
11         System.out.println(stack.peek());
12         System.out.println(stack);
13         //弹出最后添加的元素
14         System.out.println(stack.pop());
15         System.out.println(stack);
16     }
17 
18 }

2. ArrayDeque的FIFO队列实现

 1 public class ArrayDequeQueue {
 2 
 3     public static void main(String[] args) {
 4         ArrayDeque<String> queue = new ArrayDeque<>();
 5         //入队
 6         queue.offer("AAA");
 7         queue.offer("BBB");
 8         queue.offer("CCC");
 9         System.out.println(queue);
10         //获取但不出队
11         System.out.println(queue.peek());
12         System.out.println(queue);
13         //出队
14         System.out.println(queue.poll());
15         System.out.println(queue);
16     }
17 
18 }

LinkedList实现类

LinkedList比较特殊,它既实现了List接口,同时也实现了Deque接口。因此它具备了List、队列和栈的特性,在应用开发中有广泛的用途。

 1 public class TestLinkedList {
 2 
 3     public static void main(String[] args) {
 4         LinkedList<String> ll = new LinkedList<>();
 5         //入队
 6         ll.offer("AAA");
 7         //压栈
 8         ll.push("BBB");
 9         //双端的另一端入队
10         ll.addFirst("NNN");
11         ll.forEach(str -> System.out.println("遍历中:" + str));
12         //获取队头
13         System.out.println(ll.peekFirst());
14         //获取队尾
15         System.out.println(ll.peekLast());
16         //弹栈
17         System.out.println(ll.pop());
18         System.out.println(ll);
19         //双端的后端出列
20         System.out.println(ll.pollLast());
21         System.out.println(ll);
22     }
23 }
目录
相关文章
|
3月前
|
Kubernetes Cloud Native Java
云原生之旅:从容器到微服务的演进之路Java 内存管理:垃圾收集器与性能调优
【8月更文挑战第30天】在数字化时代的浪潮中,企业如何乘风破浪?云原生技术提供了一个强有力的桨。本文将带你从容器技术的基石出发,探索微服务架构的奥秘,最终实现在云端自由翱翔的梦想。我们将一起见证代码如何转化为业务的翅膀,让你的应用在云海中高飞。
|
3月前
|
Java Linux Maven
java依赖冲突解决问题之容器加载依赖jar包如何解决
java依赖冲突解决问题之容器加载依赖jar包如何解决
|
26天前
|
存储 Java 调度
Java 中的优先队列 PriorityQueue 详解
【10月更文挑战第22天】优先队列 PriorityQueue 是一种非常实用的数据结构,在许多场景中都能发挥重要作用。通过深入了解其特点和用法,我们可以更好地利用它来解决实际问题。
|
21天前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
1月前
|
安全 Java 程序员
Java集合之战:ArrayList vs LinkedList,谁才是你的最佳选择?
本文介绍了 Java 中常用的两个集合类 ArrayList 和 LinkedList,分析了它们的底层实现、特点及适用场景。ArrayList 基于数组,适合频繁查询;LinkedList 基于链表,适合频繁增删。文章还讨论了如何实现线程安全,推荐使用 CopyOnWriteArrayList 来提升性能。希望帮助读者选择合适的数据结构,写出更高效的代码。
59 3
|
1月前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
43 4
|
1月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
76 3
|
1月前
|
存储 Java 索引
Java LinkedList详解
`LinkedList`是Java集合框架中的一个重要类,实现了`List`、`Deque`和`Cloneable`接口。它基于双向链表,支持动态扩展,允许重复元素。虽然通过索引访问元素的时间复杂度为O(n),但在插入和删除操作上表现优异,时间复杂度为O(1)。常用操作包括创建、添加、获取、删除和查找元素,以及使用迭代器遍历。适用于频繁插入和删除的场景,如队列和栈的实现。
|
2月前
|
Java API 索引
LinkedList的基本操作【集合容器知识回顾 ③】
本文详细介绍了LinkedList的基本操作,包括初始化、添加、获取、删除、替换元素、遍历,以及LinkedList独有的队列和栈相关操作,同时指出了LinkedList在插入和删除操作方面的优势以及在随机访问元素时的性能劣势。
|
3月前
|
存储 消息中间件 Java
何时在 Java 中使用 ArrayList 和 LinkedList
【8月更文挑战第23天】
39 2
下一篇
无影云桌面