Java
java.util
Arrays
HashSet
TreeSet
Deque
ArrayDeque
ArrayList
LinkedBlockingDeque
Map
HashMap
HashTable
TreeMap
LinkedHashMap
ComputeIfAbsent 在jdk8下的死锁场景
synchronized的锁升级过程
Volatile 关键字
redis 中的Lua脚本
AQS - 从干饭角度解析
ConcurrentHashMap
本文档使用 MrDoc 发布
-
+
首页
ArrayList
## 描述 实现了List接口的变长数组。允许所有元素,包括null 。 除了实现List接口之外,该类还提供了操作内部用于存储列表的数组大小的方法。 (这个类大致相当于Vector ,只是它是不同步的。) size 、 isEmpty 、 get 、 set 、 iterator和listIterator操作在恒定时间内运行。 add操作在分摊常数 time 内运行,即添加 n 个元素需要 O(n) 时间。 所有其他操作都在线性时间内运行(粗略地说)。 与LinkedList实现相比,常量因子较低。 每个ArrayList实例都有一个容量 。 容量是用于存储列表中元素的数组的大小。 它始终至少与列表大小一样大。 随着元素被添加到 ArrayList,它的容量会自动增长。 除了添加元素具有恒定的摊销时间成本之外,没有指定增长政策的细节。 应用程序可以在使用ensureCapacity操作添加大量元素之前增加ArrayList实例的容量。 这可以减少增量重新分配的量。 请注意,此实现不是同步的。 如果多个线程同时访问一个ArrayList实例,并且至少有一个线程在结构上修改了列表,则必须在外部进行同步。 (结构修改是添加或删除一个或多个元素,或显式调整后备数组大小的任何操作;仅设置元素的值不是结构修改。)这通常是通过同步一些自然封装的对象来实现的。列表。 如果不存在此类对象,则应使用Collections.synchronizedList方法“包装”该列表。 这最好在创建时完成,以防止对列表的意外不同步访问 ## 底层结构 ``` { transient Object[] elementData; private int size; private Object[] grow(int minCapacity) { return elementData = Arrays.copyOf(elementData,newCapacity(minCapacity)); } } ``` ## 参数 默认初始化大小:10 增长比例:推荐频繁插入前调用ensureCapacity(int minCapacity),minCapacity = 所需的最小容量, newCapacity函数限制增加比例大概是max(1.5*size,minCapacity). 所以add只让size+1即可。 ## 有意思的函数 容量缩容到目前元素长度,用于最小化存储 trimToSize() 容量扩容函数,增长数 = Math.max(capacity/2 ,n); ensureCapacity(n) 类似substring. subList(int fromIndex, int toIndex);
寒烟濡雨
2022年3月29日 21:35
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码