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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM