论坛首页 入门技术论坛

AbstractList的equals()方法的效率问题

浏览 1936 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-26  
最近在看jdk源码,看到AbstractList的时候发现一个问题,它的equals()方法是这样的
public boolean equals(Object o) {
        if (o == this)
            return true;
        if (!(o instanceof List))
            return false;

        ListIterator<E> e1 = listIterator();
        ListIterator e2 = ((List) o).listIterator();
        while (e1.hasNext() && e2.hasNext()) {
            E o1 = e1.next();
            Object o2 = e2.next();
            if (!(o1==null ? o2==null : o1.equals(o2)))
                return false;
        }
        return !(e1.hasNext() || e2.hasNext());
}


先判断o是不是本身,再判断o是不是个List,然后通过Iterator迭代来判断List中的每个元素是否相等。
我的疑问是,在开始为什么不先判断一下List的size()是否相等,如果有两个很大的List比较,那么开始
比较大小,如果不相等直接return fasle,省的去迭代所有元素了。
   发表时间:2012-10-23  
兰州说得有道理!
另外,两个list相等,还要元素的顺序也相等啊?这也太苛刻了吧……
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics