ArrayList和LinkedList原理
ArrayList:
ArrayList 使用默认无参数构造函数,底层的Object数组长度默认为10,当长度不够用自动增长0.5倍
源代码:
默认长度10
/**
* Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;
如果数组长度不够增长0.5倍grow方法
int newCapacity = oldCapacity + (oldCapacity >> 1);
ArrayList为什么查询快,增删慢?
查询快:
因为数组的内存地址排列是连续的,可以很快找到比如 list.get(100); 第一个元素内存地址是0x98,那么内存地址加100就找到了。
增删慢:
增:
我们假设这个数组长度容量为7,现在要再添加一个元素它会怎么做呢?
增加元素时,先检测数组长度是否够用,如果底层Object数组长度不够,增加0.5倍的长度,形成一个新的Object数组,并将之前的数组元素copy到新的数组里面。
删:
删除慢:当删除里面的其中一个数据时,后面的数据要全部移动一个位置。
LinkedList:
使用链表数据结构实现,特点,增删快,查询慢。
查询慢:元素之前内存地址不连续,只能挨个挨个遍历查找
增加:
插入数据时,只需要改变内存地址的指向;
将和它有关系的内存地址指向删除掉,没人指向它,它就成为了垃圾对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现