最近在看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集合框架中,许多接口的实现类都基于抽象类,如ArrayList和LinkedList都继承自AbstractList抽象类。 通过理解和熟练运用抽象类,开发者可以更好地设计和实现面向对象的程序,提高代码的复用性和可维护性。...
此外,由于ArrayList内部使用的是object[]数组,所以每次添加或删除元素时,如果超出当前容量,都需要创建新的数组并复制所有元素,这在大数据量操作时可能效率较低。 相比之下,List是C# 2.0引入的泛型集合,它...
1. 效率:接口只定义方法,没有实现,实现接口的类需要提供具体实现,可能导致代码冗余;抽象类可以提供部分实现,减少代码量。 2. 对比:接口允许多继承,抽象类只能单继承,接口更灵活;抽象类可以包含字段和非...
Java集合框架是Java编程语言中一个...通过深入理解集合的概念、特点、使用方法以及其间的继承关系,可以极大地提高代码的效率和灵活性。在实际开发中,熟练掌握和运用这些知识对于构建高质量的Java应用程序至关重要。
- **实现方法**:`equals(Object o)`, `hashCode()`, `toString()`, `isEmpty()`, `size()`等。 - **抽象方法**:`containsKey(Object key)`, `containsValue(Object value)`, `get(Object key)`, `put(K key, V ...
* equals(),比较两个数组是否相等 * sort(),对不同类型的数组排序 * binarySearch(),在不同类型的数组中用二分查找算法搜索特定值 * fill(int[] a, int fromIndex, int toIndex, int val)用一个指定的值填充...
ArrayList类是Java.util包中的一个成员,继承自AbstractList并实现了List接口,因此它支持随机访问,但插入和删除操作可能比基于链表的List实现(如LinkedList)效率低。 1. **ArrayList的概念** ArrayList是一个...
- 集合的比较:`equals()`和`hashCode()`方法用于比较集合内容是否相等。 - 集合的并发操作:Java的并发库提供`ConcurrentHashMap`和`CopyOnWriteArrayList`等线程安全的集合实现。 6. 泛型: - Java集合框架...
2. 删除元素:`remove(Object o)`根据对象的equals()方法移除第一个匹配的元素;`remove(int index)`移除指定位置的元素。 3. 查询:`get(int index)`返回指定位置的元素,`size()`返回列表中元素的数量。 4. 修改:...
Vector 底层结构和源码分析 Vector 是 Java 中一个古老的集合类,用于存储和管理对象的集合。它和ArrayList一样,都是基于数组实现的,...但是,它的效率不如 ArrayList,通常情况下,我们更倾向于使用 ArrayList。
抽象类可以包含抽象方法(没有方法体的方法)和非抽象方法,它可以提供部分实现,也可以不提供。抽象类主要用于代码复用,通过继承抽象类,子类可以获得父类的成员变量和方法实现。例如,`java.util.AbstractList`是...
数据结构与算法分析是计算机科学中的核心领域,它关乎如何高效地存储、组织和操作数据,以及设计和分析解决问题的方法。在这个Java版的英文资源中,我们很可能会深入探讨这些概念,尤其对于Java开发者来说,这是一份...
- Collection接口:是集合框架的基础,定义了如`contains()`, `equals()`, `iterator()`, `size()`等基本方法。 - Set接口:不允许重复元素,`add()`, `equals()`, `hashCode()`有特殊限制,例如HashSet和TreeSet...
`AbstractList`提供了一个`iterator()`方法,返回一个`Itr`对象,`Itr`是`AbstractList`的内部类,实现了`Iterator`接口,负责具体的遍历逻辑。 #### 结论 迭代器模式在Java中的应用非常广泛,尤其在集合框架中,...
- 这个方法返回一个新的`Itr`实例,即`AbstractList`的迭代器。 - 实现代码如下: ```java public Iterator<E> iterator() { return new Itr(); } ``` 3. **`hasNext()`方法**: - 检查是否有更多的元素可...
ArrayList是Java集合框架中常用的列表实现之一,它继承自AbstractList,并实现了List接口。本文将从ArrayList的源码出发,详细解析其底层实现、默认初始容量、RandomAccess接口以及添加和获取元素的方法,进一步探讨...
1. **ArrayList类**:ArrayList继承自AbstractList并实现了List接口,它使用可变大小的数组存储元素。ArrayList提供了各种操作方法,如add、remove、get等,方便对列表进行增删查改。 2. **removeDuplicates方法**...
在Java编程语言中,类的重用是提高代码效率、减少冗余和增强软件可维护性的重要机制。本教程将深入探讨Java中的类重用,包括继承、接口、抽象类和多态等核心概念。 首先,我们要理解类的定义:在Java中,类是一种...