随笔- 247  评论- 36  文章- 17 

java List集合中contains方法总是返回false

 
ArrayList的contains方法
java
今天在用ArrayList类的caontains方法是遇到了问题,我写了一个存放User类的ArrayList  但在调用list.contains(user)时总是返回false。 去看了下ArrayList的源码,源码如下: 
Java代码  
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;   
    }  
[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方法会调用 o.equals(elementData[i])方法,其中elementData[i]是个object类的实例。也就是说我在调用list.contains(user)时实际上比较的是user.equals(object) 这当然会返回false。 

正确的方法,在User类中改写equals方法。 改写的代码如下: 
Java代码  
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);  

 

转自:http://blog.csdn.net/witsmakemen/article/details/7323604

 

posted on 2013-09-16 18:57  飘杨......  阅读(32477)  评论(0编辑  收藏