最常用方法是调用indexof(),返回首次出现索引或-1;需重写equals()和hashcode();查找全部索引需手动遍历或使用intstream.range()。

Java 中 ArrayList 查找元素索引最常用、最直接的方法是调用 indexOf() 方法,它从头到尾线性遍历,时间复杂度为 O(n),对大多数场景已足够高效。
使用 indexOf() 获取首次出现的索引
这是标准做法,适用于查找第一个匹配元素的位置:
- 如果元素存在,返回其**第一次出现的下标(从 0 开始)**;
- 如果元素不存在,返回 -1;
- 注意:该方法依赖元素的 equals() 方法判断相等性,自定义类需正确重写 equals()(和 hashCode());
示例:
List查找所有匹配索引(不止第一个)
若需获取全部出现位置,需手动遍历:
- 用 for 循环配合 get(i) 和 equals() 判断;
- 或用增强 for 配合计数器;
- Java 8+ 可结合 IntStream.range() + filter() 实现函数式风格(但性能略低,适合代码简洁优先场景);
简单循环示例:
List提升查找效率的注意事项
ArrayList 本质是数组,不支持按值快速查找。如需高频按值检索,应考虑数据结构升级:
- 仅查存在性或索引且元素唯一 → 改用 HashSet(O(1) 查找,但无序、无索引);
- 需同时保留插入顺序 + 快速查找 → 用 LinkedHashSet 或搭配 HashMap
维护索引映射; - 若列表静态不变且查找极频繁,可预先构建索引 Map(一次遍历,后续 O(1) 查询);
例如预建索引:
Map区分 null 的安全处理
ArrayList 允许存储 null,而 indexOf(null) 是合法操作,会查找第一个 null 元素:
- 不要用 list.indexOf(null) == -1 判断是否含 null —— 它本就会返回 -1 如果没 null;
- 要检查是否存在 null,可用 list.contains(null);
- 要获取 null 的索引,仍用 indexOf(null),结果为 -1 表示没有;
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











