.ArrayList是如何实现的,ArrayList和LinkedList的区别?ArrayList如何实现扩容?
2024-09-07 08:18:42
ArrayList比较简单,主要是通过数组来实现的
需要注意的是其初始容量是10
/**
* Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;
需要注意增长方法grow()
/**
* Increases the capacity to ensure that it can hold at least the
* number of elements specified by the minimum capacity argument.
*
* @param minCapacity the desired minimum capacity
*/
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
只要size > 数组的长度,就会触发grow,其中增长比例是原来的容量的一半
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
然后把原来数组的内容拷贝到新的数组
========================================================================分割线========================================================
ArrayList和LinkedList的区别
ArrayList是通过数组来实现的,读取性能很高,随机访问时间复杂度为O(1),适用于读大于写的场景
LinkedList是是通过双向队列来实现的,更新效率更高,写只需要修改前后两个节点的相关引用,但是读取效率比较低,需要最多遍历一半长度的队列,适用与写大于读的场景
最新文章
- curl命令使用
- osg osgDB::Options noTexturesInIVEFile ForceReadingImage dds_flip
- 外键为&#39;,&#39;(逗号)拼接ID,连接查询外键表ID
- SPI数据传输(库函数方法)
- USACO section1.2 Transformation
- UVA 10325 The Lottery( 容斥原理)
- install kinect driver for ARM---38
- 引擎设计跟踪(九.14.2i) Android GLES 3.0 完善
- 重叠I/O之可等待的重叠I/O【系列一】
- CSS 链接
- App接口设计原则-b
- Activity---Fragment---listView的实现
- EXCEL数据导入数据库实例(NPOI)
- 大数据与 AI 生态中的开源技术总结
- linux gcc 静态 动态链接库
- netstat -na 查看有大量TIME_WAIT解决办法(修改内核参数)
- 洛谷P1092 虫食算(算竞进阶习题)
- Python日志模块logging&;JSON
- 从理论到实践 全面理解HTTP/2
- function类型(c++11)