黑马程序员技术交流社区
标题:
集合的contains方法是怎么调用equals方法的
[打印本页]
作者:
zhouxp3323
时间:
2012-3-17 19:07
标题:
集合的contains方法是怎么调用equals方法的
集合的contains方法,是比较俩对象的时候自动调用equals方法的吗?
作者:
刘蕴学
时间:
2012-3-17 19:23
如果你没重写,那么就是调用默认的,如果你重写了,那就调用你写的,实现规则由你自己定义
作者:
段浩亮
时间:
2012-3-17 19:35
这时ArrayList中的源码:
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;
}
elementData的定义源码是:
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
}
contains方法调用的indexOf方法 indexOf中又调用了equals方法
作者:
李深山
时间:
2012-3-17 19:39
boolean equals(Object obj)函数存在每一个类中,它表示调用此函数的对象与传入的对象obj做比较,若返回true(就说这两个对象相等,事实上除了它本身没有一个对象和它真正相等)则容器就把这两个对象当作同一元素对待。若返回false,则容器就认为这两个对象是两个不同的元素。在缺省的状态下,boolean equals(Object obj)函数除了把调用它的对象作为参数输入会返回true,否则使用其他对象作为参数都会返回false。
作者:
刘元明
时间:
2012-3-17 20:13
在定义contains方法时,程序会对调用它的那个集合进行遍历,这时被传进来的那个参数会与集合中的元素挨个比较看是否相同,调用的就是equals方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2