1. 程式人生 > >java List集合中contains方法總是返回false

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

ArrayList的contains方法
----
list.contains(xxxx)
重寫xxxx的equals方法
而不是list<T>中T的
equals方法
----
java今天在用ArrayList類的caontains方法是遇到了問題,我寫了一個存放User類的ArrayList 但在呼叫list.contains(xxxx)時總是返回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 plaincopypublic
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);