Java
java.util
Arrays
HashSet
TreeSet
Deque
ArrayDeque
ArrayList
LinkedBlockingDeque
Map
HashMap
HashTable
TreeMap
LinkedHashMap
ComputeIfAbsent 在jdk8下的死锁场景
synchronized的锁升级过程
Volatile 关键字
redis 中的Lua脚本
AQS - 从干饭角度解析
ConcurrentHashMap
本文档使用 MrDoc 发布
-
+
首页
ArrayDeque
## 描述 这是一个实现了Deque接口(双端队列)的变长数组。数组容量会在需要时自动扩容。该类不是线程安全的,也不支持空元素。此类用作栈时可能比Stack快,用作队列时比LinkedList快。 ArrayDeque的大多数操作是O(1)。但remove、removeFirstOccurrence 、 removeLastOccurrence、contains 、iterator.remove()和一些批量的操作需要O(n) 如果在迭代器创建后的任何时间修改双端队列,除了通过迭代器自己的remove方法外,迭代器通常会抛出ConcurrentModificationException。 此类及其迭代器实现了Collection和Iterator接口的所有可选方法。 数组最大申请长度为Integer.MAX_VALUE - 8,因为部分VM需要一个8字节的头,Integer.MAX_VALUE 会OOM ## 底层结构 ``` // 对象数组,数组的tail永远指向null transient Object[] elements; // 头指针 transient int head; // 尾指针,永远指向空,不是尾元素 transient int tail; ``` ## 扩容参数 默认长度:16 扩容步数:64以下涨2 或 64以上涨1.5 int jump = (oldCapacity < 64) ? (oldCapacity + 2) : (oldCapacity >> 1); ## 4.简单使用 ``` ArrayDeque<Integer> arrayDeque = new ArrayDeque<>(); // 插入头 arrayDeque.add(1); // 插入尾 arrayDeque.addLast(2); arrayDeque.offer(3); // 从头取 System.out.println(arrayDeque.getFirst()); // 从尾取 System.out.println(arrayDeque.getLast()); ```
寒烟濡雨
2022年3月23日 15:33
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码