网站首页 > java教程 正文
ArrayDeque 数组双端队列
类图:
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可以直接作为栈使用;
请关注我!后续更新其他队列的相关知识点!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 上一篇: Java中的5大队列,你知道几个?
- 下一篇: 好程序员:一分钟讲清Java队列是什么?及相互关系!
猜你喜欢
- 2024-09-08 java队列之LinkedBlockingQueue和ConcurrentLinkedQueue
- 2024-09-08 Java阻塞队列中的异类,SynchronousQueue底层实现原理剖析
- 2024-09-08 100个Java工具类之61:队列类Queue
- 2024-09-08 阿里架构师浅析数据结构:队列在线程池等有限资源池中的应用
- 2024-09-08 【每日一学】Java数据结构探秘:队列与List的强大应用与性能优化
- 2024-09-08 使用Redis实现消息队列功能在Java中的应用
- 2024-09-08 『并发包入坑指北』之阻塞队列(阻塞队列poll方法)
- 2024-09-08 工作了这么久,你知道Java线程池容量应该设置多少么
- 2024-09-08 一文读懂,Java内置的延迟队列DelayQueue,原理及使用方法
- 2024-09-08 Java 消息队列的简单实现(java如何实现消息队列的监听)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)