最近在看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,省的去迭代所有元素了。
分享到:
相关推荐
- **实现方法**:`equals(Object o)`, `hashCode()`, `toString()`, `isEmpty()`, `size()`等。 - **抽象方法**:`containsKey(Object key)`, `containsValue(Object value)`, `get(Object key)`, `put(K key, V ...
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. 修改:...
List接口中的方法如`add()`、`add(int index, E element)`、`addAll()`、`clear()`、`equals()`、`get()`、`hashCode()`、`remove()`、`removeAll()`、`retainAll()`和`set()`等,提供了对列表的常用操作。...
- `toString`方法用于返回对象的字符串表示形式,而`equals`方法用于比较两个对象是否相等。 - `hashCode`方法用于返回对象的哈希码值,这对于某些集合类(如`HashSet`)来说非常重要。 #### 七、List接口实现 **...
在这个过程中,理解并运用ArrayList的迭代器(Iterator)来遍历列表,以及实现List接口的方法,如`equals()`和`hashCode()`,将是非常重要的。 此外,ArrayList的效率问题也是项目中需要考虑的。由于ArrayList基于...
它继承自AbstractList,并实现了List接口。ArrayList内部使用一个Object类型的数组来存储元素,因此,它的插入、删除和访问速度较快,但插入或删除元素时,如果需要移动大量元素,性能可能会下降。 二、创建...