`
yucang52555
  • 浏览: 68203 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

(转载)ArrayList的contains方法

阅读更多
今天在用ArrayList类的cantains方法时遇到了问题,我写了一个存放User类的ArrayList ,放入一个user对象, 但在调用list.contains(user1)时总是返回false(此处user1与user字段值完全相同)。 去看了下ArrayList的源码:

[java] view plaincopy

    public boolean contains(Object o) { 
        return indexOf(o) >= 0; 
        } 
     
     
     public int indexOf(Object o) { 
        if (o == null) { 
            for (int i = 0; i < size; i++) 
            if (elementData[i]==null) 
                return i; 
        } else { 
            for (int i = 0; i < size; i++) 
            if (o.equals(elementData[i])) 
                return i; 
        } 
        return -1; 
        } 

很明显,如果在contains()方法传入的参数是null,则直接在list找有没有null元素,如果传入的参数不是null,则contains函数用调用equals方法,把传入的参数与list中每个元素做比较。此处Object的equals默认的是比较的是两个对象的地址。当然就不相等啦。

      解决方案,在User中重写equals方法,实现比较两个对象的字段相等的逻辑

[java] view plaincopy

    public boolean equals(Object obj) { 
            if (obj instanceof User) { 
                User u = (User) obj; 
                return this.username.equals(u.username) 
                        && this.password.equals(password); 
            } 
            return super.equals(obj); 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics