public abstract class AbstractList
extends AbstractCollection<E>
implements List<E>
java.lang.Object | ||
↳ | java.util.AbstractCollection<E> | |
↳ | java.util.AbstractList<E> |
Known Direct Subclasses
|
Known Indirect Subclasses
|
该类提供了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的成员。
Fields |
|
---|---|
protected int |
modCount 这个列表的 结构修改次数 。 |
Protected constructors |
|
---|---|
AbstractList() 唯一的构造函数。 |
Public methods |
|
---|---|
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(int index) 从列表中的指定位置开始,返回此列表中元素的列表迭代器(以正确的顺序)。 该实现返回 |
ListIterator<E> |
listIterator() 返回此列表中元素的列表迭代器(按适当顺序)。 该实现返回 |
E |
remove(int index) 删除此列表中指定位置的元素(可选操作)。 这个实现总是抛出一个 |
E |
set(int index, E element) 用指定的元素替换此列表中指定位置的元素(可选操作)。 这个实现总是抛出一个 |
List<E> |
subList(int fromIndex, int toIndex) 返回指定的 fromIndex (含)和 toIndex之间的此列表部分的视图,排他性。 该实现返回一个子类为 |
Protected methods |
|
---|---|
void |
removeRange(int fromIndex, int toIndex) 从列表中删除索引在 |
Inherited methods |
|
---|---|
From class java.util.AbstractCollection
|
|
From class java.lang.Object
|
|
From interface java.util.Collection
|
|
From interface java.util.List
|
|
From interface java.lang.Iterable
|
int modCount
这个列表的结构修改次数 。 结构修改是那些改变列表大小,或以其他方式扰乱它的方式,即正在进行的迭代可能产生不正确的结果。
该字段由iterator
和listIterator
方法返回的迭代器和列表迭代器实现使用。 如果该字段的值意外更改,迭代器(或列表迭代器)将抛出ConcurrentModificationException
响应next
, remove
, previous
, set
或者add
操作。 这提供了故障快速行为,而不是在迭代期间并发修改中的非确定性行为。
按子类使用此字段是可选的。 如果子类希望提供快速迭代器(和列表迭代器),那么它只需在其add(int, E)
和remove(int)
方法(以及任何其他覆盖该方法会导致对列表进行结构修改的方法)中增加该字段。 一次调用add(int, E)
或remove(int)
必须在此字段中添加不超过一个,否则迭代器(和列表迭代器)将抛出伪造ConcurrentModificationExceptions
。 如果实现不希望提供快速迭代器,则该字段可能会被忽略。
void add (int index, E element)
将指定元素插入此列表中的指定位置(可选操作)。 将当前位置的元素(如果有的话)和任何后续元素移到右侧(将其中的一个添加到它们的索引)。
这个实现总是抛出一个 UnsupportedOperationException
。
Parameters | |
---|---|
index |
int : index at which the specified element is to be inserted |
element |
E : element to be inserted |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
|
IllegalArgumentException |
|
IndexOutOfBoundsException |
boolean add (E e)
将指定的元素附加到此列表的末尾(可选操作)。
支持此操作的列表可能会限制可以将哪些元素添加到此列表中。 特别是,一些列表将拒绝添加空元素,而其他列表将对可能添加的元素的类型施加限制。 列表类应在其文档中明确指定可添加元素的任何限制。
这个实现调用 add(size(), e)
。
请注意,除非 add(int, E)
被覆盖,否则此实现将抛出 UnsupportedOperationException
。
Parameters | |
---|---|
e |
E : element to be appended to this list |
Returns | |
---|---|
boolean |
true (as specified by add(E) ) |
Throws | |
---|---|
UnsupportedOperationException |
if the add operation is not supported by this list |
ClassCastException |
if the class of the specified element prevents it from being added to this list |
NullPointerException |
if the specified element is null and this list does not permit null elements |
IllegalArgumentException |
if some property of this element prevents it from being added to this list |
boolean addAll (int index, Collection<? extends E> c)
将指定集合中的所有元素插入指定位置的此列表中(可选操作)。 将当前在该位置的元素(如果有的话)和随后的元素移到右侧(增加它们的索引)。 新元素将按照它们由指定集合的迭代器返回的顺序出现在此列表中。 如果在操作过程中修改了指定的集合,则此操作的行为未定义。 (请注意,如果指定的集合是这个列表,并且它是非空的,则会发生这种情况。)
该实现获取指定集合上的迭代器并对其进行迭代,并使用add(int, E)
将迭代器中获取的元素一次一个地插入到此列表的适当位置。 许多实现将覆盖此方法的效率。
请注意,除非 add(int, E)
被覆盖,否则此实现将抛出 UnsupportedOperationException
。
Parameters | |
---|---|
index |
int : index at which to insert the first element from the specified collection |
c |
Collection : collection containing elements to be added to this list |
Returns | |
---|---|
boolean |
true if this list changed as a result of the call |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
|
IllegalArgumentException |
|
IndexOutOfBoundsException |
void clear ()
从此列表中删除所有元素(可选操作)。 此通话返回后,该列表将为空。
该实现调用 removeRange(0, size())
。
请注意,除非 remove(int index)
或 removeRange(int fromIndex, int toIndex)
被覆盖,否则此实现会抛出 UnsupportedOperationException
。
Throws | |
---|---|
UnsupportedOperationException |
if the clear operation is not supported by this list |
boolean equals (Object o)
将指定的对象与此列表进行比较以获得相等性。 当且仅当指定的对象也是一个列表时,返回true
,两个列表具有相同的大小,并且两个列表中的所有相应元素对都相等 。 (两个元件e1
和e2
是如果等于 (e1==null ? e2==null : e1.equals(e2))
。)换句话说,两个列表被定义为等于如果它们包含以相同的顺序相同的元件。
这个实现首先检查指定的对象是否是这个列表。 如果是,则返回true
; 如果不是,它检查指定的对象是否是列表。 如果不是,则返回false
; 如果是这样,它遍历这两个列表,比较相应的元素对。 如果任何比较返回false
,则此方法返回false
。 如果任何一个迭代器在元素之前耗尽元素,则返回false
(因为列表长度不等); 否则在迭代完成时返回true
。
Parameters | |
---|---|
o |
Object : the object to be compared for equality with this list |
Returns | |
---|---|
boolean |
true if the specified object is equal to this list |
E get (int index)
返回此列表中指定位置的元素。
Parameters | |
---|---|
index |
int : index of the element to return |
Returns | |
---|---|
E |
the element at the specified position in this list |
Throws | |
---|---|
IndexOutOfBoundsException |
int hashCode ()
返回此列表的哈希码值。
该实现完全使用用于在 hashCode()
方法的文档中定义列表散列函数的 hashCode()
。
Returns | |
---|---|
int |
the hash code value for this list |
int indexOf (Object o)
返回此列表中指定元素第一次出现的索引,如果此列表不包含元素,则返回-1。 更正式地说,返回最低索引i,例如(o==null ? get(i)==null : o.equals(get(i))) ,如果没有这样的索引,则返回-1。
该实现首先获取列表迭代器(使用listIterator()
)。 然后,它遍历列表,直到找到指定的元素或到达列表的末尾。
Parameters | |
---|---|
o |
Object : element to search for |
Returns | |
---|---|
int |
the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element |
Throws | |
---|---|
ClassCastException |
|
NullPointerException |
Iterator<E> iterator ()
以适当的顺序返回此列表中元素的迭代器。
此实现返回一个简单的实现Iterator接口,依托后台列表的 size()
, get(int)
,并 remove(int)
方法。
请注意,除非列表的 remove(int)
方法被覆盖,否则此方法返回的迭代器将响应其 remove
方法抛出 UnsupportedOperationException
。
如同(受保护的) modCount
字段的规范中所述,可以在面对并发修改时执行此实现来引发运行时异常。
Returns | |
---|---|
Iterator<E> |
an iterator over the elements in this list in proper sequence |
int lastIndexOf (Object o)
返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 更正式地说,返回最高索引i,例如(o==null ? get(i)==null : o.equals(get(i))) ,如果没有这样的索引则返回-1。
这个实现首先获得一个列表迭代器,指向列表的末尾(用listIterator(size())
)。 然后,它在列表上向后迭代,直到找到指定的元素,或者到达列表的开始。
Parameters | |
---|---|
o |
Object : element to search for |
Returns | |
---|---|
int |
the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element |
Throws | |
---|---|
ClassCastException |
|
NullPointerException |
ListIterator<E> listIterator (int index)
从列表中的指定位置开始,返回此列表中元素的列表迭代器(以正确的顺序)。 指定的索引指示将通过初始调用返回到next
的第一个元素。 初始调用previous
会返回指定索引减1的元素。
该实现返回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
字段的规范中所述,可以在面对并发修改时执行此实现来引发运行时异常。
Parameters | |
---|---|
index |
int : index of the first element to be returned from the list iterator (by a call to next ) |
Returns | |
---|---|
ListIterator<E> |
a list iterator over the elements in this list (in proper sequence), starting at the specified position in the list |
Throws | |
---|---|
IndexOutOfBoundsException |
ListIterator<E> listIterator ()
返回此列表中元素的列表迭代器(按适当顺序)。
该实现返回 listIterator(0)
。
Returns | |
---|---|
ListIterator<E> |
a list iterator over the elements in this list (in proper sequence) |
也可以看看:
E remove (int index)
删除此列表中指定位置的元素(可选操作)。 将任何随后的元素向左移(从其索引中减去一个元素)。 返回从列表中移除的元素。
这个实现总是抛出一个 UnsupportedOperationException
。
Parameters | |
---|---|
index |
int : the index of the element to be removed |
Returns | |
---|---|
E |
the element previously at the specified position |
Throws | |
---|---|
UnsupportedOperationException |
|
IndexOutOfBoundsException |
E set (int index, E element)
用指定的元素替换此列表中指定位置的元素(可选操作)。
这个实现总是抛出一个 UnsupportedOperationException
。
Parameters | |
---|---|
index |
int : index of the element to replace |
element |
E : element to be stored at the specified position |
Returns | |
---|---|
E |
the element previously at the specified position |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
|
IllegalArgumentException |
|
IndexOutOfBoundsException |
List<E> subList (int fromIndex, int toIndex)
返回指定的fromIndex (含)和toIndex之间的此列表部分视图,不包括。 (如果fromIndex和toIndex相等,则返回的列表是空的。)返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。 返回的列表支持此列表支持的所有可选列表操作。
此方法消除了对显式范围操作(数组通常存在的那种操作)的需要。 任何需要列表的操作都可以通过传递子列表视图而不是整个列表来用作范围操作。 例如,下面的习语从列表中删除了一系列元素:
list.subList(from, to).clear();Similar idioms may be constructed for indexOf and lastIndexOf, and all of the algorithms in the Collections class can be applied to a subList.
如果支持列表(即此列表)在结构上以非返回列表的方式进行了修改 ,则此方法返回的列表的语义变得未定义。 (结构修改是那些改变这个列表的大小,或者以这样一种方式干扰它,以致正在进行的迭代可能产生不正确的结果。)
该实现返回一个子类为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
。
Parameters | |
---|---|
fromIndex |
int : low endpoint (inclusive) of the subList |
toIndex |
int : high endpoint (exclusive) of the subList |
Returns | |
---|---|
List<E> |
a view of the specified range within this list |
Throws | |
---|---|
IndexOutOfBoundsException |
if an endpoint index value is out of range (fromIndex < 0 || toIndex > size) |
IllegalArgumentException |
if the endpoint indices are out of order (fromIndex > toIndex) |
void removeRange (int fromIndex, int toIndex)
从列表中删除索引在fromIndex
(含)和toIndex
之间的所有元素,排他性。 将任何后续元素向左移(减少索引)。 这个调用缩短了列表的(toIndex - fromIndex)
元素。 (如果toIndex==fromIndex
,此操作无效。)
此方法在此列表及其子列表中由clear
操作调用。 重写此方法以利用列表实现的内部优势可以显着提高此列表及其子列表上clear
操作的性能。
这个实现获得了一个列表迭代器,位于fromIndex
之前,并且重复调用ListIterator.next
然后ListIterator.remove
调用ListIterator.next
,直到整个范围被删除。 注意:如果ListIterator.remove
需要线性时间,则此实现需要二次时间。
Parameters | |
---|---|
fromIndex |
int : index of first element to be removed |
toIndex |
int : index after last element to be removed |