`
bigpig21
  • 浏览: 582 次
  • 性别: 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初学教程教你学会JAVA4

    1. **减少编码工作量**:`AbstractList`实现了`List`接口的所有方法,除了少数几个必须由子类实现的方法。这意味着开发者只需要关注那些特定于自己需求的方法实现即可。 2. **提供默认实现**:`AbstractList`提供了...

    abstract抽象类

    - 在Java集合框架中,许多接口的实现类都基于抽象类,如ArrayList和LinkedList都继承自AbstractList抽象类。 通过理解和熟练运用抽象类,开发者可以更好地设计和实现面向对象的程序,提高代码的复用性和可维护性。...

    arraylist 和 list<T> 效率对比

    此外,由于ArrayList内部使用的是object[]数组,所以每次添加或删除元素时,如果超出当前容量,都需要创建新的数组并复制所有元素,这在大数据量操作时可能效率较低。 相比之下,List是C# 2.0引入的泛型集合,它...

    我的面试问题总结.docx

    1. 效率:接口只定义方法,没有实现,实现接口的类需要提供具体实现,可能导致代码冗余;抽象类可以提供部分实现,减少代码量。 2. 对比:接口允许多继承,抽象类只能单继承,接口更灵活;抽象类可以包含字段和非...

    java集合学习笔记2018.5.10

    Java集合框架是Java编程语言中一个...通过深入理解集合的概念、特点、使用方法以及其间的继承关系,可以极大地提高代码的效率和灵活性。在实际开发中,熟练掌握和运用这些知识对于构建高质量的Java应用程序至关重要。

    Java程序设计 3 数组与集合.pptx

    * equals(),比较两个数组是否相等 * sort(),对不同类型的数组排序 * binarySearch(),在不同类型的数组中用二分查找算法搜索特定值 * fill(int[] a, int fromIndex, int toIndex, int val)用一个指定的值填充...

    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. 修改:...

    Vector底层结构和源码分析

    Vector 底层结构和源码分析 Vector 是 Java 中一个古老的集合类,用于存储和管理对象的集合。它和ArrayList一样,都是基于数组实现的,...但是,它的效率不如 ArrayList,通常情况下,我们更倾向于使用 ArrayList。

    第13讲 谈谈接口和抽象类有什么区别?1

    抽象类可以包含抽象方法(没有方法体的方法)和非抽象方法,它可以提供部分实现,也可以不提供。抽象类主要用于代码复用,通过继承抽象类,子类可以获得父类的成员变量和方法实现。例如,`java.util.AbstractList`是...

    数据结构与算法分析(Java版英文)

    数据结构与算法分析是计算机科学中的核心领域,它关乎如何高效地存储、组织和操作数据,以及设计和分析解决问题的方法。在这个Java版的英文资源中,我们很可能会深入探讨这些概念,尤其对于Java开发者来说,这是一份...

    北大青鸟Java教程

    - Collection接口:是集合框架的基础,定义了如`contains()`, `equals()`, `iterator()`, `size()`等基本方法。 - Set接口:不允许重复元素,`add()`, `equals()`, `hashCode()`有特殊限制,例如HashSet和TreeSet...

    java专题-迭代器

    `AbstractList`提供了一个`iterator()`方法,返回一个`Itr`对象,`Itr`是`AbstractList`的内部类,实现了`Iterator`接口,负责具体的遍历逻辑。 #### 结论 迭代器模式在Java中的应用非常广泛,尤其在集合框架中,...

    Java源码分析:深入探讨Iterator模式

    - 这个方法返回一个新的`Itr`实例,即`AbstractList`的迭代器。 - 实现代码如下: ```java public Iterator&lt;E&gt; iterator() { return new Itr(); } ``` 3. **`hasNext()`方法**: - 检查是否有更多的元素可...

    从原码解析ArrayList

    ArrayList是Java集合框架中常用的列表实现之一,它继承自AbstractList,并实现了List接口。本文将从ArrayList的源码出发,详细解析其底层实现、默认初始容量、RandomAccess接口以及添加和获取元素的方法,进一步探讨...

    顺序表删除重复元素java.docx

    1. **ArrayList类**:ArrayList继承自AbstractList并实现了List接口,它使用可变大小的数组存储元素。ArrayList提供了各种操作方法,如add、remove、get等,方便对列表进行增删查改。 2. **removeDuplicates方法**...

    java类的重用

    在Java编程语言中,类的重用是提高代码效率、减少冗余和增强软件可维护性的重要机制。本教程将深入探讨Java中的类重用,包括继承、接口、抽象类和多态等核心概念。 首先,我们要理解类的定义:在Java中,类是一种...

Global site tag (gtag.js) - Google Analytics