arraylist中获取元素首次索引用indexof(),末次用lastindexof(),二者均支持null且基于equals()比较;需自定义逻辑时可手动遍历。

在 Java 的 ArrayList 中,获取元素的索引(即第一次出现的位置)和最后一次出现的位置,主要依靠内置方法和手动遍历两种方式。下面分情况说明实用做法。
获取元素第一次出现的索引
ArrayList 继承自 AbstractList,提供了 indexOf(Object o) 方法,它从头开始查找,返回第一个匹配元素的索引;若不存在则返回 -1。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 该方法调用元素的
equals()判断相等性,注意自定义类需正确重写equals()(和hashCode()) - 对
null值也安全:可直接传null查找第一个null元素
ArrayList<string> list = new ArrayList(Arrays.asList("a", "b", "c", "b", "d"));
int firstIndex = list.indexOf("b"); // 返回 1</string>
获取元素最后一次出现的索引
ArrayList 没有直接提供 lastIndexOf() 的同名方法?其实有——它继承自 AbstractList,而 AbstractList 又实现了 List 接口,所以 lastIndexOf(Object o) 是完全可用的。
- 从末尾向前查找,返回最后一个匹配元素的索引
- 同样支持
null,逻辑与indexOf()对称
int lastIndex = list.lastIndexOf("b"); // 返回 3
int notFound = list.lastIndexOf("x"); // 返回 -1
手动遍历获取更灵活的控制
如果需要获取所有出现位置、或结合条件(如忽略大小写、部分匹配等),就得自己遍历。推荐使用增强 for 循环配合索引变量,或传统 for 循环。
- 用传统 for 更易获取索引:
for (int i = 0; i - 若要找倒序中“首次”满足某条件的元素(比如最后一个长度大于 3 的字符串),从
list.size()-1开始递减遍历更高效
int lastEvenIndex = -1; for (int i = 0; i <h3>注意事项与常见误区</h3>
-
indexOf()和lastIndexOf()都是线性查找,时间复杂度 O(n),大数据量时慎用在高频场景 - 它们只适用于精确相等判断;模糊匹配、正则、范围比较等必须手写逻辑
- 不要混淆
get(int index)(根据索引取值)和indexOf()(根据值找索引) - 对空集合调用这两个方法均返回
-1,无需额外判空(但访问get()前仍需检查索引边界)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










