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

简介: 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 }
目录
相关文章
|
7月前
|
Java 虚拟化 容器
(Java)Java里JFrame窗体的基本操作(容器布局篇-1)
容器 容器,我的理解是可以包容其他东西的玩意。它可以是一个盒子,可以是一个虚拟化的物品,可只要能包裹住其他存在质体的东西,那么都可以称作是容器。例如:JPanel组件和JScollPane组件两者都是容器也是组件。 既然有容器,那么容器中的布局就必不可少了。不然不规矩的摆放物品,人类看不习惯,我也看不习惯 ???? 本篇内容,将说明java JFrame窗体里容器中几类布局。 说明:所有在JFrame窗体里的容器布局都会使用setLayout()方法,采用的布局参数都将放进这个方法里 绝对布局 调用窗体容器
218 1
|
11月前
|
存储 缓存 安全
Java 集合容器常见面试题及详细解析
本文全面解析Java集合框架,涵盖基础概念、常见接口与类的特点及区别、底层数据结构、线程安全等内容。通过实例讲解List(如ArrayList、LinkedList)、Set(如HashSet、TreeSet)、Map(如HashMap、TreeMap)等核心组件,帮助读者深入理解集合容器的使用场景与性能优化。适合准备面试或提升开发技能的开发者阅读。
209 0
|
11月前
|
缓存 Java API
Java 集合容器实操技巧与案例详解
本教程基于Java 8+新特性和现代开发实践,深入讲解Java集合容器的实操技巧。通过具体场景演示Stream API数据处理、ConcurrentHashMap并发控制、LinkedHashMap实现LRU缓存、TreeSet自定义排序等高级特性。同时涵盖computeIfAbsent优化操作、EnumMap专用集合使用、集合统计与运算(交集、并集、差集)等内容。代码示例丰富,助力掌握高效编程方法。[点击获取完整代码](https://pan.quark.cn/s/14fcf913bae6)。
259 0
|
Java
Java LinkedList集合的深度剖析
总的来说,我希望像说故事一样讲解Java LinkedList集合的使用和实现原理,让有些许枯燥的编程知识变得趣味盎然。在这个“公交车”故事中,你不仅熟悉了LinkedList集合的实现和使用,而且还更深入地理解了数据结构中的链表。链表可能会因为插入和删除的便利性而被选用,虽然它的查找效率并不高,但是在很多场景中仍然十分有效。这就像公交车,虽然它速度不快,但却是城市出行的重要工具。
156 8
|
存储 安全 算法
Java容器及其常用方法汇总
Java Collections框架提供了丰富的接口和实现类,用于管理和操作集合数据。
342 2
Java容器及其常用方法汇总
|
监控 Java 中间件
8G的容器Java堆才4G怎么就OOM了?
本文记录最近一例Java应用OOM问题的排查过程,希望可以给遇到类似问题的同学提供参考。
|
存储 Java 调度
Java 中的优先队列 PriorityQueue 详解
【10月更文挑战第22天】优先队列 PriorityQueue 是一种非常实用的数据结构,在许多场景中都能发挥重要作用。通过深入了解其特点和用法,我们可以更好地利用它来解决实际问题。
811 13
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
安全 Java 程序员
Java集合之战:ArrayList vs LinkedList,谁才是你的最佳选择?
本文介绍了 Java 中常用的两个集合类 ArrayList 和 LinkedList,分析了它们的底层实现、特点及适用场景。ArrayList 基于数组,适合频繁查询;LinkedList 基于链表,适合频繁增删。文章还讨论了如何实现线程安全,推荐使用 CopyOnWriteArrayList 来提升性能。希望帮助读者选择合适的数据结构,写出更高效的代码。
1039 3