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;
}
}