List<Object>的contains方法,默认针对于对象地址,如果想要确认List<Object>是否包含自己的Object(针对对象的属性值内容),那么只有在自己的对象里重写equals方法。
分析:
查看ArrayList的contains方法:
transient Object[] elementData;
private int size;
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;
继续查看Object的equals方法:
public boolean equals(Object obj) {
return (this == obj);
}
这里用的==,比较的是地址。
如果你要针对 自己定义的对象 的属性值内容判断List是否包含,那么就要在自己定义的对象里面重写equals方法了。
如下是一个例子:
public class Urls {
private String url;
public Urls( String url) {
this.url = url;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public boolean equals(Object o) {
if (o instanceof Urls) {
Urls url1 = (Urls) o;
return this.url.equals(url1.getUrl());
}
return super.equals(o);
}
@Override
public String toString(){
return url;
}
}
本文详细解析了List<Object>中contains方法的工作原理,并通过实例展示了如何为自定义对象重写equals方法来实现基于属性值的内容匹配。
1423

被折叠的 条评论
为什么被折叠?



