Java集合(5)——List接口与AbstractList抽象类源码解析

本文详细解析了Java集合框架中的List接口和AbstractList抽象类,包括List接口的有序特性、主要成员方法,以及AbstractList如何简化List接口的实现。重点介绍了AbstractList的关键方法如add、get、set、remove等的源码分析,并讨论了fail-fast机制及异常处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

List接口

List是一个有序可以重复可以有null元素的集合

类图

这里写图片描述

官方文档

这里写图片描述

List成员方法

这里写图片描述

其中“有序”,指的是存储的时候按照元素的添加顺序进行存储和获取。

  • 有序的集合(也成为序列)。该接口的开发人员可以精确的控制列表中每个元素的插入位置。开发人员可以通过索引访问元素,并搜索列表中的元素
  • 与Set不同的是,列表通常允许重复的元素。更正式的说,列表通常允许对元素e1和e2存储在列别中,其中e1.equals(e2)。如果实现该接口的类允许存在null元素,那么就允许存在多个null。

AbstractList抽象类

类图

这里写图片描述

官方文档

这里写图片描述

public abstract class AbstractList<E>
extends AbstractCollection<E>
implements List<E>
  • AbstractList抽象类实现了很多List接口中的方法,减轻了想要实现List接口的开发人员的负担,如果开发人员想要实现List接口,那么他可以直接继承AbstractList类然后重写对应的方法就可以了。如果开发人员想要顺序访问数据(如LinkedList类),那么继承AbstractSequentialList 类比继承AbstractList要更高效
  • 如果开发人员想要实现一个不可修改的List,那么只需要继承该类,然后重写两个方法:get(int)size()方法
  • 如果开发人员想要实现一个可修改的List,那么需要重写set()方法,如果不重写会抛出UnsupportedOperationException异常,如果size()的大小是可变的,那么开发人员还需要重写add(int, E)remove(int)方法
  • 该类的子类需要有2个构造方法,一个是空参,一个是参数类型为Collection的构造方法
  • 该类的子类可以不实现iterator方法,因为这个抽象类已经实现了iterator()方法
AbstractList的成员变量

该类只有一个成员变量:该List在结构上已经被修改的次数
protected transient int modCount = 0;

Iterator迭代器和ListIterator迭代器会使用到该变量,如果迭代器的expectModCount与该变量的值不同,那就会抛出ConcurrentModificationException异常,在官方文档中称其为* fail-fast *

AbstractList的成员方法

这里写图片描述

(1) public boolean add(E e)方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值