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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭天龚 中级黑马   /  2013-6-3 02:20  /  1192 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郭天龚 于 2013-6-5 13:34 编辑

如果ArrayList a=new ArrayList();
       a1.add("java01");
        a1.add("java02");
        a1.add("java01");
        a1.add("java03");        

public static ArrayList singleElement(ArrayList a)
{
        ArrayList a2=new ArrayList();
        for (Iterator it=a.iterator();it.hasNext();)
        {
                Object obj=it.next();
                if (!a2.contains(obj))
                {
                        a2.add(obj);
                }
        }
        return a2;
}
上面这段代码中的ArrayList a2=new ArrayList();构造一个初始容量为 10 的空列表。而public boolean contains(Object o)实质是
当且仅当此列表包含至少一个满足 (o==null ? e==null : o.equals(e)) 的元素 e 时,则返回 true。
我想问的是if语句中的a2.contains(obj)第一次判断时a2中还没有元素,那么第一次时这里的e是什么?
也就是问第一次方法 contains(Object o)是拿Object o和a2中的什么比较的,因为此时a2为空列表。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1

查看全部评分

1 个回复

正序浏览
查看ArrayList中contains()方法的源码可以看到,它调用了indexOf(obj)方法,而indexOf()方法又调用了equals()方法来做地址值比较,obj.equals(element[i]),由于第一次集合a2是空集合,所以里面不会有元素,就会在contains()方法返回false,   if (!a2.contains(obj)) { a2.add(obj);},这句话就会执行了。
            

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马