天天看點

java list泛型集合_java List集合中泛型為對象時 containsAll方法

今天遇到一個坑,java list集合中存入對象,然後用containsAll方法進行比較時, 總是傳回 false;

檢視源碼得知:

public boolean containsAll(Collection> c) {

for (Object e : c)

if (!contains(e))

return false;

return true;

}進入 contains(e)

public boolean contains(Object o) {

return indexOf(o) >= 0;

}

進入indexOf(o)

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;

}

進入equals

public boolean equals(Object obj) {

return (this == obj);

}

到這裡發現到equals調用的是Object.java 的equals方法,是以這裡如果是對象的話,這麼比較,是在比較位址,是以一定會false;

是以加入是User 對象的話,在User對象中重寫equals 方法即可;

例如:

public boolean equals(Object obj) {

if (obj instanceof DtAnswer) {

DtAnswer u = (DtAnswer) obj;

return this.id.equals(u.id);

}

return super.equals(obj);

}

再此:謝謝原文作者,https://www.cnblogs.com/tony-yang-flutter/p/list_contains.html