`
bigpig21
  • 浏览: 605 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

阅读更多
最近在看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,省的去迭代所有元素了。
分享到:
评论

相关推荐

    java.util包源码pdf版

    - **实现方法**:`equals(Object o)`, `hashCode()`, `toString()`, `isEmpty()`, `size()`等。 - **抽象方法**:`containsKey(Object key)`, `containsValue(Object value)`, `get(Object key)`, `put(K key, V ...

    Java中ArrayList类的用法.docx

    ArrayList类是Java.util包中的一个成员,继承自AbstractList并实现了List接口,因此它支持随机访问,但插入和删除操作可能比基于链表的List实现(如LinkedList)效率低。 1. **ArrayList的概念** ArrayList是一个...

    java常用集合类总结

    - 集合的比较:`equals()`和`hashCode()`方法用于比较集合内容是否相等。 - 集合的并发操作:Java的并发库提供`ConcurrentHashMap`和`CopyOnWriteArrayList`等线程安全的集合实现。 6. 泛型: - Java集合框架...

    JAVA提高第十篇 ArrayList深入分析

    2. 删除元素:`remove(Object o)`根据对象的equals()方法移除第一个匹配的元素;`remove(int index)`移除指定位置的元素。 3. 查询:`get(int index)`返回指定位置的元素,`size()`返回列表中元素的数量。 4. 修改:...

    学习笔记 java\CoreJava笔记\CoreJava_day11

    List接口中的方法如`add()`、`add(int index, E element)`、`addAll()`、`clear()`、`equals()`、`get()`、`hashCode()`、`remove()`、`removeAll()`、`retainAll()`和`set()`等,提供了对列表的常用操作。...

    java基础重点难点

    - `toString`方法用于返回对象的字符串表示形式,而`equals`方法用于比较两个对象是否相等。 - `hashCode`方法用于返回对象的哈希码值,这对于某些集合类(如`HashSet`)来说非常重要。 #### 七、List接口实现 **...

    CECS277:CECS 277(CSULB)中的Java项目

    在这个过程中,理解并运用ArrayList的迭代器(Iterator)来遍历列表,以及实现List接口的方法,如`equals()`和`hashCode()`,将是非常重要的。 此外,ArrayList的效率问题也是项目中需要考虑的。由于ArrayList基于...

    java代码-使用集合ArrayList对字符串进行存储和管理

    它继承自AbstractList,并实现了List接口。ArrayList内部使用一个Object类型的数组来存储元素,因此,它的插入、删除和访问速度较快,但插入或删除元素时,如果需要移动大量元素,性能可能会下降。 二、创建...

Global site tag (gtag.js) - Google Analytics