目录
(1)集合中元素对应类重写了Object类的equals()方法。
(2)集合中元素对应类未重写Object类的equals()方法。
一、contains底层代码
在我之前的博客,Java中的HashSet的常用方法总结中提到过contains方法,其中我提到过contains方法中调用的equals方法的调用实际上牵扯到多态。本篇就详细解析一下contains的底层代码:
截取ArrayList的contains()方法的底层代码:
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
可知,contains()方法调用了indexOf()方法,再截取indexOf方法的底层代码:
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方法,所以,我会将重点放在equals方法的解析上。
下面,举三个代码示例来详述contains方法的执行过程: