天天看点

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