黑马程序员技术交流社区

标题: 集合的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