java List集合中contains方法總是返回false
阿新 • • 發佈:2019-02-05
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;
}
publicint 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 plaincopypublicboolean 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);