专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java中的9个队列,你知道的有几个,运用过的有几个?

temp10 2024-09-08 09:39:04 java教程 13 ℃ 0 评论


ArrayDeque 数组双端队列

Java中的9个队列,你知道的有几个,运用过的有几个?

类图:



ArrayDeque 简介

双端队列是一种特殊的队列,它的两端都可以进出元素,故而得名双端队列。

ArrayDeque是一种以循环数组方式实现的双端队列,它是非线程安全的。

特性

1. 无限的扩展,自动扩展队列大小的。(当然在不会内存溢出的情况下。)

2. 非线程安全的,不支持并发访问和修改。

3. 支持fast-fail.

4. 作为栈使用的话比比栈要快.

5. 当队列使用比linklist要快。

6. null元素被禁止使用。

注意:当用作栈时,比 Stack 快,当用作队列时,比 LinkedList 快 一是因为它基于循环数组(只需操作索引),二是没有使用 Synchronized 修饰方法(非线程安全)

容量:容量是 2 的整数次幂,最小(初始)容量是 8,构造函数可以指定容量,自动修正为 2 的整数次幂大小 默认容量是16,容量占满时,使用翻倍策略扩容,内部是个数组(循环数组)。

通过继承体系可以看,ArrayDeque实现了Deque接口,Deque接口继承自Queue接口,它是对Queue的一种增强。

Deque中新增了以下几类方法:

(1)*First,表示从队列头操作元素;

(2)*Last,表示从队列尾操作元素;

(3)push(e),pop(),以栈的方式操作元素的方法;

ArrayDeque 属性


从属性我们可以看到,ArrayDeque使用数组存储元素,并使用头尾指针标识队列的头和尾,其最小容量是8。

ArrayDeque 构造方法


三种构造方法:通过构造方法,我们知道默认初始容量是16,最小容量是8

ArrayDeque 入队 addFirst(e)和addLast(e)。


入队有两种方式,从队列头或者从队列尾;

如果容量不够了,直接扩大为两倍;

通过取模的方式让头尾指针在数组范围内循环;

x & (len - 1) = x % len,使用&的方式更快;

ArrayDeque 扩容

ArrayDeque出队 pollFirst()和pollLast()。


出队有两种方式,从队列头或者从队列尾;

通过取模的方式让头尾指针在数组范围内循环;

出队之后没有缩容

ArrayDeque栈的使用


入栈出栈只要都操作队列头就可以了。

总结

(1)ArrayDeque是采用数组方式实现的双端队列;

(2)ArrayDeque的出队入队是通过头尾指针循环利用数组实现的;

(3)ArrayDeque容量不足时是会扩容的,每次扩容容量增加一倍;

(4)ArrayDeque可以直接作为栈使用;


请关注我!后续更新其他队列的相关知识点!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表