如何通过List.contains()方法判断特定对象是否存在于集合中?

2026-04-29 09:201阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计978个文字,预计阅读时间需要4分钟。

如何通过List.contains()方法判断特定对象是否存在于集合中?

根本原因不是方法本身存在问题,而是它依赖于+equals+判断相等性。如果元素类没有重写+equals+(以及搭配的+hashCode+),默认使用的是+Object.equals+。这也意味着比较的是引用地址而非内容。因此,即使两个对象内容相同,但不是同一个实例,也会被判断为不相等。

常见错误现象:list.contains(new Person("Alice", 25)) 返回 false,哪怕列表里已有另一个 Person("Alice", 25) 实例。

  • 必须确保目标类重写了 equals()(且逻辑符合业务含义,比如按 ID 或关键字段比较)
  • hashCode() 也得一并重写,否则放进 HashSet 等集合时可能出问题(虽然 List.contains() 不直接依赖它,但保持契约一致是底线)
  • 使用 Lombok 的话,加 @EqualsAndHashCode 注解最省事;手写注意 null 安全和字段顺序

contains() 查基本类型或 String 没问题,但要注意包装类缓存

IntegerStringBoolean 这些 JDK 自带类都已正确实现 equals(),可直接用 contains()

阅读全文
标签:AI

本文共计978个文字,预计阅读时间需要4分钟。

如何通过List.contains()方法判断特定对象是否存在于集合中?

根本原因不是方法本身存在问题,而是它依赖于+equals+判断相等性。如果元素类没有重写+equals+(以及搭配的+hashCode+),默认使用的是+Object.equals+。这也意味着比较的是引用地址而非内容。因此,即使两个对象内容相同,但不是同一个实例,也会被判断为不相等。

常见错误现象:list.contains(new Person("Alice", 25)) 返回 false,哪怕列表里已有另一个 Person("Alice", 25) 实例。

  • 必须确保目标类重写了 equals()(且逻辑符合业务含义,比如按 ID 或关键字段比较)
  • hashCode() 也得一并重写,否则放进 HashSet 等集合时可能出问题(虽然 List.contains() 不直接依赖它,但保持契约一致是底线)
  • 使用 Lombok 的话,加 @EqualsAndHashCode 注解最省事;手写注意 null 安全和字段顺序

contains() 查基本类型或 String 没问题,但要注意包装类缓存

IntegerStringBoolean 这些 JDK 自带类都已正确实现 equals(),可直接用 contains()

阅读全文
标签:AI