arraylist 获取首尾元素时间复杂度为 o(1),首元素用 get(0),尾元素用 get(size()-1),均需先判空;禁用 remove(0) 或 remove(size()-1) 获取,因其为 o(n) 且会修改列表。

Java 中 ArrayList 获取首尾元素非常快,因为它是基于数组实现的,支持 O(1) 时间复杂度的随机访问。
获取第一个元素(首元素)
直接通过索引 0 访问,前提是列表非空:
- 使用
get(0)方法,最常用且高效 - 若列表为空,会抛出
IndexOutOfBoundsException,建议先检查isEmpty() - 示例:list.get(0)
获取最后一个元素(尾元素)
用 size() - 1 作为索引,同样要求列表非空:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 调用
get(list.size() - 1) - 注意:
size()是 O(1),不会影响性能 - 务必判断
!list.isEmpty(),避免越界异常 - 示例:list.get(list.size() - 1)
安全封装的常用写法
为避免重复判空,可封装工具方法或使用 Optional(Java 8+):
- 首元素:list.isEmpty() ? null : list.get(0)
- 尾元素:list.isEmpty() ? null : list.get(list.size() - 1)
- 更健壮方式(返回 Optional):list.isEmpty() ? Optional.empty() : Optional.of(list.get(list.size() - 1))
为什么不推荐用 remove(0) 或 remove(size-1) 来“获取”?
虽然也能拿到元素,但这两个操作会触发数组搬移,时间复杂度是 O(n):
-
remove(0)需要把后面所有元素前移一位 -
remove(size-1)虽然只涉及缩容,但仍是修改操作,且有额外开销 - 仅需读取时,坚决不要用
remove代替get
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










