arraylist通过索引随机访问元素的时间复杂度为o(1),因其底层是连续存储的object[]数组,get(int index)直接返回elementdata[index];应优先用isempty()判空,避免误用stream的skip().findfirst()替代get()。

ArrayList 通过索引快速定位元素,靠的是底层的数组随机访问特性——时间复杂度为 O(1)。它不需遍历,直接用索引计算内存地址就能拿到元素。
底层是数组,支持直接下标访问
ArrayList 内部封装了一个 Object[] 数组(JDK 8+ 是 transient Object[] elementData),元素在内存中连续存储。当你调用 get(int index) 时,它实际执行的是:
return (E) elementData[index];
这和普通数组 arr[i] 访问完全等价,没有循环、没有查找,纯指针偏移运算。
使用 get() 方法是最直接的方式
只要索引合法(0 ≤ index
- 确保先检查边界,避免 IndexOutOfBoundsException
- 不要用 for-each 或迭代器代替 get() 来“按索引取值”,那会失去 O(1) 优势
- 注意:null 元素合法,get 返回 null 不代表越界,要结合 size() 判断
索引访问快,但增删首尾/中间不一定快
定位快 ≠ 所有操作都快。需注意:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- get(index) 和 set(index, e) 是 O(1)
- add(e) 在末尾是均摊 O(1),但 add(index, e) 或 remove(index) 涉及数组搬移,最坏 O(n)
- 如果频繁按索引修改中间元素,要考虑是否真适合用 ArrayList
小技巧:配合 size() 安全取值
常见安全写法示例:
- if (list.size() > 5) { String s = list.get(5); }
- 用 list.isEmpty() 替代 list.size() == 0,更语义化
- Stream 的 skip(n).findFirst() 不是随机访问,是顺序跳过,别误当 get() 用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










