黑马程序员技术交流社区

标题: 集合ArrayList中的方法contains的问题 [打印本页]

作者: 郭天龚    时间: 2013-6-3 02:20
标题: 集合ArrayList中的方法contains的问题
本帖最后由 郭天龚 于 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为空列表。


作者: 火之意志    时间: 2013-6-3 07:12
查看ArrayList中contains()方法的源码可以看到,它调用了indexOf(obj)方法,而indexOf()方法又调用了equals()方法来做地址值比较,obj.equals(element[i]),由于第一次集合a2是空集合,所以里面不会有元素,就会在contains()方法返回false,   if (!a2.contains(obj)) { a2.add(obj);},这句话就会执行了。
            




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2