源码阅读(9):Java中主要的Queue、Deque结构——概述

1. Queue、Deque结构概述

Queue(队列)、Deque(双端队列)结构是Java集合概念中和List概念平级的另一个重要概念。队列也是一种“表”结构,在之前的文章中我们已经介绍过“表”结构的定义,这里在复习一下:这是一个一种在一维空间下元素按照某种逻辑结构进行线性连接排列的数据结构。

队列的基本定义是,它其中存储的元素允许从线性表的一端进行元素添加操作,允许从线性表的另一端进行移除操作。能够进行元素添加的一端称为队尾;能够进行元素移除的一端称为队头。而双端队列是指那些可以在线性表一端既进行添加操作又进行移除操作的队列结构。注意:队列和双端队列都不允许在除了队头或者队尾的其它位置进行元素的读、写操作。在Java体系中凡是具有队列操作特定的集合结构,都实现或者间接实现了java.util.Queue接口;凡是具有双端队列操作特性的集合结构,都实现或者间接实现了java.util.Deque接口。

那么有的读者可能会问,Java中有很多数据集合结构都可以即从线性表的两端进行元素读写操作,又可以从线性表的指定位置进行元素读写操作,这个怎么说?这里就以本专题之前介绍过的LinkedList集合来详细说明一下。LinkedList集合就满足本段落的问题描述,但是LinkedList集合实现的Deque接口中,只有那些在线性结构两端进行读写操作的定义,而LinkedList集合能够在线性结构的指定位置进行读写操作的定义,都来自于AbstractSequentialList类的继承和对List接口的实现


上图中展示了Java中的java.util.Queue接口、java.util.Deque接口所涉及的部分重要接口和抽象类,以及j他们在java.util包中的具体实现类。其中以黄色表示的类就是本文将要介绍的java.util包中关于java.util.Queue接口、java.util.Deque接口的重要实现类,他们分别是java.util.LinkedList(已介绍过)、java.util.ArrayDeque和java.util.PriorityQueue。

请注意Java中还有大量关于Queue(队列)接口和Deque(双端队列)接口的实现,其中就包括java.util.concurrent包中的ConcurrentLinkedDeque类、LinkedBlockingDeque类、ArrayBlockingQueue类、PriorityBlockingQueue类等等,这些类在本专题中都将进行详细讨论。但是本专题的前半部分先专注于讨论java.util包中的内容(因为相对简单),关于java.util.concurrent包中的内容将在本专题随后的文章中进行详细说明。

在本篇文章和后续的几篇文章中,我们将详细介绍java.util.ArrayDeque和java.util.PriorityQueue两个集合类的工作原理,以便大家能将其中的设计思路应用到实际工作中。这两个集合类都是基本数据结构设计在Java中的实际落地应用,例如ArrayDeque为了保证对已有数组控件的充分利用,使用的基本思路是可循环的双指针数组(但不代表不进行扩容);PriorityQueue使用“最小堆”结构,对基于权值的排序性能进行优化。

====================
(接下文《源码阅读(10):Java中主要的Queue、Deque结构——ArrayDeque集合》)

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页