Java中查找ArrayList元素最后一次出现位置最推荐使用Collections.lastIndexOf()方法,它从末尾搜索并返回索引,未找到返回-1;也可手动倒序遍历,需用Objects.equals安全比较;注意indexOf()只返回首次位置,自定义对象须重写equals()。

Java 中 ArrayList 本身没有直接提供“查找元素最后一次出现位置”的方法,但可以通过 从后往前遍历 或使用 Collections.lastIndexOf() 工具方法 实现。最常用、最简洁的方式是调用 Collections.lastIndexOfSubList() 的兄弟方法 —— Collections.lastIndexOf(),但它只适用于 List 接口的实现类(包括 ArrayList)。
用 Collections.lastIndexOf() 快速获取最后索引
这是最推荐的方式:无需手动循环,代码简洁且语义清晰。
-
Collections.lastIndexOf(list, element)会从列表末尾开始搜索,返回最后一次出现的索引;未找到则返回-1 - 要求元素能正确使用
equals()判断相等(对 null 值也安全)
ArrayList<string> list = new ArrayList(Arrays.asList("a", "b", "c", "b", "d", "b"));
int lastIndex = Collections.lastIndexOf(list, "b"); // 返回 5
</string>
手动倒序遍历(兼容性高,适合自定义逻辑)
如果需要在查找过程中加入额外判断(比如忽略大小写、匹配条件等),或想避免引入工具类,可手写循环。
- 从
list.size() - 1开始递减遍历到0 - 用
Objects.equals(list.get(i), target)安全比较(支持 target 为 null) - 找到第一个匹配项就立即返回索引,即为最后一次出现位置
public static <t> int lastIndexOf(ArrayList<t> list, T target) {
for (int i = list.size() - 1; i >= 0; i--) {
if (Objects.equals(list.get(i), target)) {
return i;
}
}
return -1;
}
</t></t>
注意:indexOf() 只返回第一次出现的位置
别误用 ArrayList.indexOf() —— 它始终从前向后搜索,返回的是首次匹配索引,不是最后一次。
- 例如:
list.indexOf("b")在["a","b","c","b"]中返回1,而非3 - 如需最后一次,必须显式倒查或用
Collections.lastIndexOf()
对自定义对象要重写 equals() 和 hashCode()
如果你查找的是自定义类实例(如 User 对象),确保该类已正确重写 equals() 方法;否则默认使用引用比较,永远找不到相同内容的不同对象。
- IDE(如 IntelliJ)可一键生成
equals()和hashCode() - 若用 Lombok,加
@EqualsAndHashCode注解即可
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











