最常用方法是indexof(),返回首次出现索引,不存在则返回-1;需查找所有位置时须手动遍历并用equals()判断,注意遍历时不可修改列表。

ArrayList 查找指定元素位置,最常用的方法是 indexOf(),它返回元素第一次出现的索引;如果不存在,返回 -1。
用 indexOf() 找第一个匹配位置
这是最直接的方式,适用于大多数场景:
- 调用
list.indexOf(element),内部按顺序遍历比较(使用equals()判断相等) - 区分 null:如果要查找
null,也能正确处理(前提是列表中允许存 null) - 注意:只返回**首次出现**的下标,重复元素不会全部返回
示例:
ArrayList
int idx = list.indexOf("b"); // 返回 1
查找所有匹配位置(不止第一个)
如果需要所有下标,得手动遍历:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 用 for 循环配合
get(i)和equals()判断 - 推荐用增强 for 配合计数器,或直接用传统 for +
size() - 注意避免在遍历时修改列表(如 remove),否则可能跳过元素或抛异常
示例:
List
for (int i = 0; i
if ("b".equals(list.get(i))) {
positions.add(i);
}
}
自定义比较逻辑(比如忽略大小写、部分匹配)
indexOf() 只支持完全相等判断。若需更灵活查找:
- 用 for 循环 + 自定义条件,例如
str.toLowerCase().contains(keyword) - Java 8+ 可结合
stream().filter().map(...).collect(),但要注意性能和可读性 - 不建议重写 equals() 来“欺骗” indexOf(),容易引发其他问题
注意事项和常见误区
几个容易出错的地方:
-
引用类型慎用 ==:indexOf() 用的是
equals(),不是 ==,确保对象正确重写了 equals() -
值为 null 的查找:
indexOf(null)是合法的,会找第一个为 null 的位置 - 未查到时返回 -1,不是抛异常,记得判负再使用
- 线程不安全:多线程环境下查找前最好加同步,或改用并发集合










