sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1796 随笔 :: 22 文章 :: 24 评论 :: 226万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

ArrayList的contains方法(转)
https://www.shuzhiduo.com/A/x9J216pez6/

今天在用ArrayList类的caontains方法是遇到了问题,我写了一个存放User类的ArrayList  但在调用list.contains(user)时总是返回false。 去看了下ArrayList的源码,源码如下:

  1. public boolean contains(Object o) {
  2. return indexOf(o) >= 0;
  3. }
  4.  
  5. public int indexOf(Object o) {
  6. if (o == null) {
  7. for (int i = 0; i < size; i++)
  8. if (elementData[i]==null)
  9. return i;
  10. } else {
  11. for (int i = 0; i < size; i++)
  12. if (o.equals(elementData[i]))
  13. return i;
  14. }
  15. return -1;
  16. }
  1. public boolean contains(Object o) {
  2. return indexOf(o) >= 0;
  3. }
  4.  
  5. public int indexOf(Object o) {
  6. if (o == null) {
  7. for (int i = 0; i < size; i++)
  8. if (elementData[i]==null)
  9. return i;
  10. } else {
  11. for (int i = 0; i < size; i++)
  12. if (o.equals(elementData[i]))
  13. return i;
  14. }
  15. return -1;
  16. }

发现在contains方法会调用
o.equals(elementData[i])方法,其中elementData[i]是个object类的实例。也就是说我在调用
list.contains(user)时实际上比较的是user.equals(object) 这当然会返回false。

正确的方法,在User类中改写equals方法。 改写的代码如下:

  1. public boolean equals(Object obj) {
  2. if (obj instanceof User) {
  3. User u = (User) obj;
  4. return this.username.equals(u.username)
  5. && this.password.equals(password);
  6. }
  7. return super.equals(obj);
posted on   sunny123456  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2022-03-23 springboot允许跨域注解_SpringBoot项目针对跨域问题的三种解决方案 在Spring Boot 中给我们提供了一个注解 @CrossOrigin 来实现跨域
2022-03-23 C# WebService创建与使用
2022-03-23 Thymeleaf - 使用方法及国际化(超详细) springboot Thymeleaf是一个和Velocity、FreeMarker 类似的模板引擎,它在有网络和无网络的环境下皆可运行
2022-03-23 Udesk微前端之路
2022-03-23 jpa 常用查询方法记录
2022-03-23 mybatis注解多表查询
2022-03-23 Mybatis基于注解实现多表查询
点击右上角即可分享
微信分享提示