直接用list.contains(element)判断元素是否存在,它遍历列表并调用equals()比较(null用==),自定义类需重写equals()和hashcode();不支持按属性查找或批量判断,大数据量时建议用hashset。

直接用 list.contains(element) 即可,返回 true 表示存在,false 表示不存在。
contains() 方法怎么工作
它会遍历整个 ArrayList,对每个元素调用 element.equals(当前元素) 进行比较。只要有一次返回 true,就立即返回 true;遍历完都没匹配上,才返回 false。
- 如果要查找的是
null,则用==判断(即只认真正的null) - 如果查找的是非
null对象,就依赖该对象的equals()方法 - 自定义类(如
Person)必须重写equals()(以及hashCode(),尤其在配合 HashSet 使用时)
常见误区和注意事项
容易出错的地方不是语法,而是语义理解:
- 不能拿字符串去查一个存着
Student对象的列表:students.contains("张三")永远是false,因为String.equals(Student)不可能为true - 如果元素类型不兼容(比如向
ArrayList<integer></integer>传入"123"),编译可能通过(泛型擦除),但运行时equals()返回false -
contains()是线性查找,时间复杂度 O(n),大数据量时慎用;如需高频查找,考虑换HashSet
想按属性查找怎么办
比如 ArrayList 存的是 Product 对象,你想查 “name 等于 ‘iPhone’” 的产品——contains() 无法直接做到,得手动遍历或用更现代的方式:
- 传统写法:用 for 循环 + if 判断字段
- Java 8+ 推荐:
list.stream().anyMatch(p -> "iPhone".equals(p.getName())) - 也可封装成工具方法,避免重复逻辑
检查多个元素是否至少有一个存在
如果要判断 ArrayList 是否包含另一个集合里的“任意一个”元素,不能直接传集合进去,contains() 不支持。可以这样写:
- 用循环逐个调用
contains(),遇到第一个true就跳出 - 或者用 Stream:
otherList.stream().anyMatch(list::contains) - 注意:不要误用
retainAll(),它是修改原列表,不是做“是否包含”的判断
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











