javaList集合中contains⽅法总是返回false
ArrayList的contains⽅法
java
今天在⽤ArrayList类的caontains⽅法是遇到了问题,我写了⼀个存放User类的ArrayList  但在调⽤ains(user)时总是返回false。去看了下ArrayList的源码,源码如下:
Java代码
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;
}
[java] view plaincopy
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;
}
发现在contains⽅法会调⽤ o.equals(elementData[i])⽅法,其中elementData[i]是个object类的实例。也就是说我在调⽤ains(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)equals()方法
&& this.password.equals(password);
}
return super.equals(obj);
转⾃:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。