A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouxp3323 黑马帝   /  2012-3-17 19:07  /  2777 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

集合的contains方法,是比较俩对象的时候自动调用equals方法的吗?

4 个回复

倒序浏览
如果你没重写,那么就是调用默认的,如果你重写了,那就调用你写的,实现规则由你自己定义

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
这时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方法

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
boolean equals(Object obj)函数存在每一个类中,它表示调用此函数的对象与传入的对象obj做比较,若返回true(就说这两个对象相等,事实上除了它本身没有一个对象和它真正相等)则容器就把这两个对象当作同一元素对待。若返回false,则容器就认为这两个对象是两个不同的元素。在缺省的状态下,boolean equals(Object obj)函数除了把调用它的对象作为参数输入会返回true,否则使用其他对象作为参数都会返回false。
回复 使用道具 举报
在定义contains方法时,程序会对调用它的那个集合进行遍历,这时被传进来的那个参数会与集合中的元素挨个比较看是否相同,调用的就是equals方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马