- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractList<E>
-
- 实现的所有接口
-
Iterable<E>
,Collection<E>
,List<E>
- 已知直接子类:
-
AbstractSequentialList
,ArrayList
,Vector
public abstract class AbstractList<E>extends AbstractCollection<E>implements List<E>
此类提供List
接口的骨干实现,以最大限度地减少实现由“随机访问”数据存储(例如数组)支持的此接口所需的工作量。 对于顺序访问数据(例如链接列表),应优先使用AbstractSequentialList
。要实现不可修改的列表,程序员只需要扩展此类并提供
get(int)
和size()
方法的实现。要实现可修改的列表,程序员必须另外覆盖
set(int, E)
方法(否则会抛出UnsupportedOperationException
)。 如果列表是可变大小的,则程序员必须另外覆盖add(int, E)
和remove(int)
方法。程序员通常应根据
Collection
接口规范中的建议提供void(无参数)和集合构造函数。不像其他的抽象集合实现,程序员不必提供迭代器实现; 迭代器和列表迭代器由此类在“随机访问”方法之上 实现 :
get(int)
,set(int, E)
,add(int, E)
和remove(int)
。此类中每个非抽象方法的文档详细描述了它的实现。 如果正在实施的集合允许更有效的实现,则可以覆盖这些方法中的每一个。
此类是Java Collections Framework的成员。
- 从以下版本开始:
- 1.2
-
-
字段汇总
字段 变量和类型 字段 描述 protected int
modCount
此列表已被 结构修改的次数 。
-
构造方法摘要
构造方法 变量 构造器 描述 protected
AbstractList()
唯一的构造函数。
-
方法摘要
所有方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 void
add(int index, E element)
将指定元素插入此列表中的指定位置(可选操作)。boolean
add(E e)
将指定的元素追加到此列表的末尾(可选操作)。boolean
addAll(int index, Collection<? extends E> c)
将指定集合中的所有元素插入到指定位置的此列表中(可选操作)。void
clear()
从此列表中删除所有元素(可选操作)。boolean
equals(Object o)
将指定对象与此列表进行比较以获得相等性。abstract E
get(int index)
返回此列表中指定位置的元素。int
hashCode()
返回此列表的哈希码值。int
indexOf(Object o)
返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。Iterator<E>
iterator()
以适当的顺序返回此列表中元素的迭代器。int
lastIndexOf(Object o)
返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回-1。ListIterator<E>
listIterator()
返回此列表中元素的列表迭代器(按适当顺序)。ListIterator<E>
listIterator(int index)
从列表中的指定位置开始,返回列表中元素的列表迭代器(按正确顺序)。E
remove(int index)
删除此列表中指定位置的元素(可选操作)。protected void
removeRange(int fromIndex, int toIndex)
从此列表中删除索引介于fromIndex
(含)和toIndex
(独占)之间的所有元素。E
set(int index, E element)
用指定的元素替换此列表中指定位置的元素(可选操作)。List<E>
subList(int fromIndex, int toIndex)
返回指定的fromIndex
(包含)和toIndex
(独占)之间的此列表部分的视图。-
声明方法的类 java.util.AbstractCollection
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray, toString
-
声明方法的接口 java.util.Collection
parallelStream, removeIf, stream, toArray
-
声明方法的接口 java.util.List
addAll, contains, containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, size, sort, spliterator, toArray, toArray
-
-
-
-
字段详细信息
-
modCount
protected transient int modCount
此列表已被结构修改的次数 。 结构修改是那些改变列表大小或以其他方式扰乱它的方式,即正在进行的迭代可能产生不正确的结果。该字段由
iterator
和listIterator
方法返回的迭代器和列表迭代器实现使用。 如果该字段的值意外更改,迭代器(或列表迭代器)将抛出ConcurrentModificationException
响应next
,remove
,previous
,set
或add
操作。 这提供了快速失败的行为,而不是在迭代期间面对并发修改时的非确定性行为。子类对此字段的使用是可选的。 如果子类希望提供快速失败迭代器(和列表迭代器),那么它仅仅需要增加其在该领域
add(int, E)
种remove(int)
方法(而且它会覆盖导致结构修改列表中的任何其他方法)。 单次调用add(int, E)
或remove(int)
必须向此字段添加不超过一个,否则迭代器(和列表迭代器)将抛出伪造ConcurrentModificationExceptions
。 如果实现不希望提供快速失败的迭代器,则可以忽略此字段。
-
-
方法详细信息
-
add
public boolean add(E e)
将指定的元素追加到此列表的末尾(可选操作)。支持此操作的列表可能会限制可能添加到此列表的元素。 特别是,某些列表将拒绝添加null元素,而其他列表将对可能添加的元素类型施加限制。 列表类应在其文档中明确指出可以添加哪些元素的任何限制。
- Specified by:
-
add
in interfaceCollection<E>
- Specified by:
-
add
,接口List<E>
- 重写:
-
add
类AbstractCollection<E>
- 实现要求:
- 此实现调用
add(size(), e)
。注意,此实现抛出
UnsupportedOperationException
除非add(int, E)
被覆盖。 - 参数
-
e
- 要附加到此列表的元素 - 结果
-
true
(由Collection.add(E)
指定) - 异常
-
UnsupportedOperationException
- 如果此列表不支持add
操作 -
ClassCastException
- 如果指定元素的类阻止将其添加到此列表中 -
NullPointerException
- 如果指定的元素为null且此列表不允许null元素 -
IllegalArgumentException
- 如果此元素的某些属性阻止将其添加到此列表中
-
get
public abstract E get(int index)
返回此列表中指定位置的元素。- Specified by:
-
get
在接口List<E>
- 参数
-
index
- 要返回的元素的索引 - 结果
- 此列表中指定位置的元素
- 异常
-
IndexOutOfBoundsException
- 如果指数超出范围(index < 0 || index >= size()
)
-
set
public E set(int index, E element)
用指定的元素替换此列表中指定位置的元素(可选操作)。- Specified by:
-
set
接口List<E>
- 实现要求:
- 此实现总是抛出
UnsupportedOperationException
。 - 参数
-
index
- 要替换的元素的索引 -
element
- 要存储在指定位置的元素 - 结果
- 先前在指定位置的元素
- 异常
-
UnsupportedOperationException
- 如果此列表不支持set
操作 -
ClassCastException
- 如果指定元素的类阻止将其添加到此列表中 -
NullPointerException
- 如果指定的元素为null且此列表不允许null元素 -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此列表中 -
IndexOutOfBoundsException
- 如果索引超出范围(index < 0 || index >= size()
)
-
add
public void add(int index, E element)
将指定元素插入此列表中的指定位置(可选操作)。 将当前位置的元素(如果有)和任何后续元素向右移动(将其添加到索引中)。- Specified by:
-
add
接口List<E>
- 实现要求:
- 此实现总是抛出
UnsupportedOperationException
。 - 参数
-
index
- 要插入指定元素的索引 -
element
- 要插入的元素 - 异常
-
UnsupportedOperationException
- 如果此列表不支持add
-
ClassCastException
- 如果指定元素的类阻止将其添加到此列表中 -
NullPointerException
- 如果指定的元素为null且此列表不允许null元素 -
IllegalArgumentException
- 如果指定元素的某些属性阻止将其添加到此列表中 -
IndexOutOfBoundsException
- 如果索引超出范围(index < 0 || index > size()
)
-
remove
public E remove(int index)
删除此列表中指定位置的元素(可选操作)。 将任何后续元素向左移位(从索引中减去一个元素)。 返回从列表中删除的元素。- Specified by:
-
remove
接口List<E>
- 实现要求:
- 此实现总是抛出
UnsupportedOperationException
。 - 参数
-
index
- 要删除的元素的索引 - 结果
- 先前在指定位置的元素
- 异常
-
UnsupportedOperationException
- 如果此列表不支持remove
操作 -
IndexOutOfBoundsException
- 如果索引超出范围(index < 0 || index >= size()
)
-
indexOf
public int indexOf(Object o)
返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。 更正式地,返回最低索引i
如Objects.equals(o, get(i))
,如果没有这样的索引则返回-1。- Specified by:
-
indexOf
在接口List<E>
- 实现要求:
- 此实现首先获取列表迭代器(使用
listIterator()
)。 然后,它遍历列表,直到找到指定的元素或到达列表的末尾。 - 参数
-
o
- 要搜索的元素 - 结果
- 此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1
- 异常
-
ClassCastException
- 如果指定元素的类型与此列表不兼容( optional ) -
NullPointerException
- 如果指定的元素为null且此列表不允许null元素( optional )
-
lastIndexOf
public int lastIndexOf(Object o)
返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回-1。 更正式的是,返回最高指数i
如Objects.equals(o, get(i))
,如果没有这样的指数则为-1。- Specified by:
-
lastIndexOf
在接口List<E>
- 实现要求:
- 此实现首先获取指向列表末尾的列表迭代器(使用
listIterator(size())
)。 然后,它在列表上向后迭代,直到找到指定的元素,或者到达列表的开头。 - 参数
-
o
- 要搜索的元素 - 结果
- 此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回-1
- 异常
-
ClassCastException
- 如果指定元素的类型与此列表不兼容( optional ) -
NullPointerException
- 如果指定的元素为null且此列表不允许null元素( optional )
-
clear
public void clear()
从此列表中删除所有元素(可选操作)。 此调用返回后,列表将为空。- Specified by:
-
clear
接口Collection<E>
- Specified by:
-
clear
在界面List<E>
- 重写:
-
clear
在类AbstractCollection<E>
- 实现要求:
- 此实现调用
removeRange(0, size())
。请注意,除非重写
remove(int index)
或removeRange(int fromIndex, int toIndex)
否则此实现会抛出UnsupportedOperationException
。 - 异常
-
UnsupportedOperationException
- 如果此列表不支持clear
操作
-
addAll
public boolean addAll(int index, Collection<? extends E> c)
将指定集合中的所有元素插入到指定位置的此列表中(可选操作)。 将当前位置的元素(如果有)和任何后续元素向右移动(增加其索引)。 新元素将按照指定集合的迭代器返回的顺序出现在此列表中。 如果在操作正在进行时修改了指定的集合,则此操作的行为是不确定的。 (请注意,如果指定的集合是此列表,则会发生这种情况,并且它是非空的。)- Specified by:
-
addAll
,接口List<E>
- 实现要求:
- 此实现获取指定集合上的迭代器并对其进行迭代,使用
add(int, E)
将从迭代器获取的元素一次一个地插入到此列表中的适当位置。 许多实现将覆盖此方法以提高效率。注意,此实现抛出
UnsupportedOperationException
除非add(int, E)
被覆盖。 - 参数
-
index
- 从指定集合插入第一个元素的索引 -
c
- 包含要添加到此列表的元素的集合 - 结果
-
true
如果此列表因呼叫而更改 - 异常
-
UnsupportedOperationException
- 如果此列表不支持addAll
-
ClassCastException
- 如果指定集合的元素的类阻止将其添加到此列表中 -
NullPointerException
- 如果指定的集合包含一个或多个null元素,并且此列表不允许null元素,或者指定的集合为null -
IllegalArgumentException
- 如果指定集合的某个元素的某些属性阻止将其添加到此列表中 -
IndexOutOfBoundsException
- 如果索引超出范围(index < 0 || index > size()
)
-
iterator
public Iterator<E> iterator()
以适当的顺序返回此列表中元素的迭代器。- Specified by:
-
iterator
在接口Collection<E>
- Specified by:
-
iterator
in interfaceIterable<E>
- Specified by:
-
iterator
在接口List<E>
- Specified by:
-
iterator
在类AbstractCollection<E>
- 实现要求:
- 此实现返回一个简单的实现Iterator接口,依托后台列表的
size()
,get(int)
和remove(int)
方法。请注意,此方法返回的迭代器将抛出
UnsupportedOperationException
以响应其remove
方法,除非重写列表的remove(int)
方法。如同(受保护)
modCount
字段的规范中所述,可以使该实现在并发修改时抛出运行时异常。 - 结果
- 以适当的顺序在此列表中的元素上的迭代器
-
listIterator
public ListIterator<E> listIterator()
返回此列表中元素的列表迭代器(按适当顺序)。- Specified by:
-
listIterator
,接口List<E>
- 实现要求:
- 此实现返回
listIterator(0)
。 - 结果
- 列表中的元素列表迭代器(按正确顺序)
- 另请参见:
-
listIterator(int)
-
listIterator
public ListIterator<E> listIterator(int index)
- Specified by:
-
listIterator
在界面List<E>
- 实现要求:
- 此实现返回
ListIterator
接口的简单实现,该接口扩展了iterator()
方法返回的Iterator
接口的实现。 该ListIterator
实现依赖于后台列表的get(int)
,set(int, E)
,add(int, E)
和remove(int)
方法。请注意,此实现返回的列表迭代器将抛出一个
UnsupportedOperationException
响应其remove
,set
和add
方法,除非列表的remove(int)
,set(int, E)
和add(int, E)
方法被覆盖。可以使该实现在并发修改时抛出运行时异常,如(受保护的)
modCount
字段的规范中所述。 - 参数
-
index
- 从列表迭代器返回的第一个元素的索引(通过调用next
) - 结果
- 列表中元素的列表迭代器(按正确顺序),从列表中的指定位置开始
- 异常
-
IndexOutOfBoundsException
- 如果索引超出范围(index < 0 || index > size()
)
-
subList
public List<E> subList(int fromIndex, int toIndex)
返回指定的fromIndex
(包含)和toIndex
(独占)之间的此列表部分的视图。 (如果fromIndex
和toIndex
相等,则返回的列表为空。)返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。 返回的列表支持此列表支持的所有可选列表操作。此方法消除了对显式范围操作的需要(对于数组通常存在的排序)。 任何需要列表的操作都可以通过传递subList视图而不是整个列表来用作范围操作。 例如,以下习语从列表中删除了一系列元素:
list.subList(from, to).clear();
indexOf
和lastIndexOf
构造类似的习语,并且可以将Collections
类中的所有算法应用于子列表。如果支持列表(即此列表)在结构上以除返回列表之外的任何方式进行变量 ,则此方法返回的列表的语义将变为未定义。 (结构修改是那些改变了这个列表的大小,或以其他方式扰乱它的方式,正在进行的迭代可能会产生不正确的结果。)
- Specified by:
-
subList
在界面List<E>
- 实现要求:
- 此实现返回一个子类
AbstractList
的列表。 子类在私有字段中存储subList的大小(可以在其生命周期内更改),以及支持列表的预期值modCount
。 子类有两种变体,其中一种实现RandomAccess
。 如果此列表实现RandomAccess
则返回的列表将是实现RandomAccess
的子类的实例。子类的
set(int, E)
,get(int)
,add(int, E)
,remove(int)
,addAll(int, Collection)
和removeRange(int, int)
方法都委托给支持抽象列表上的相应方法,边界检查的指标和调整偏移后。addAll(Collection c)
方法仅返回addAll(size, c)
。listIterator(int)
方法在支持列表上的列表迭代器上返回“包装器对象”,该列表迭代器是使用支持列表上的相应方法创建的。iterator
方法仅返回listIterator()
,而size
方法仅返回子类的size
字段。所有方法首先检查后备列表的实际
modCount
是否等于其预期值,如果不是,则抛出ConcurrentModificationException
。 - 参数
-
fromIndex
-fromIndex
低端点(包括) -
toIndex
-toIndex
高端点(不包括) - 结果
- 此列表中指定范围的视图
- 异常
-
IndexOutOfBoundsException
- 如果端点索引值超出范围(fromIndex < 0 || toIndex > size)
-
IllegalArgumentException
- 如果端点索引无序(fromIndex > toIndex)
-
equals
public boolean equals(Object o)
将指定对象与此列表进行比较以获得相等性。 当且仅当指定的对象也是列表时,返回true
,两个列表具有相同的大小,并且两个列表中的所有对应元素对都相等 。 (两个元件e1
和e2
是如果相等(e1==null ? e2==null : e1.equals(e2))
)。换句话说,两个列表被定义为等于如果它们包含以相同的顺序相同的元件。- Specified by:
-
equals
在接口Collection<E>
- Specified by:
-
equals
,接口List<E>
- 重写:
-
equals
在课程Object
- 实现要求:
- 此实现首先检查指定的对象是否为此列表。 如果是,则返回
true
; 如果不是,它检查指定的对象是否是列表。 如果没有,则返回false
; 如果是这样,它迭代两个列表,比较相应的元素对。 如果任何比较返回false
,则此方法返回false
。 如果其中一个迭代器在另一个之前耗尽了元素,则返回false
(因为列表的长度不等); 否则在迭代完成时返回true
。 - 参数
-
o
- 要与此列表进行相等性比较的对象 - 结果
-
true
如果指定的对象等于此列表 - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
返回此列表的哈希码值。- Specified by:
-
hashCode
在界面Collection<E>
- Specified by:
-
hashCode
in interfaceList<E>
- 重写:
-
hashCode
在类Object
- 实现要求:
- 此实现完全使用用于在
List.hashCode()
方法的文档中定义列表哈希函数的 代码 。 - 结果
- 此列表的哈希码值
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
removeRange
protected void removeRange(int fromIndex, int toIndex)
从此列表中删除索引介于fromIndex
(含)和toIndex
(独占)之间的所有元素。 将任何后续元素向左移动(降低其索引)。 此调用通过(toIndex - fromIndex)
元素缩短列表。 (如果是toIndex==fromIndex
,则此操作无效。)此列表及其子列表上的
clear
操作调用此方法。 重写此方法以利用列表实现的内部可以显着提高此列表及其子列表上的clear
操作的性能。- 实现要求:
- 此实现变得定位之前的列表迭代
fromIndex
,并反复调用ListIterator.next
其次是ListIterator.remove
,直到整个范围内已被删除。 注意:如果ListIterator.remove
需要线性时间,则此实现需要二次时间。 - 参数
-
fromIndex
- 要删除的第一个元素的索引 -
toIndex
- 要删除的最后一个元素之后的索引
-
-