Most visited

Recently visited

Added in API level 1

AbstractList

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的成员。

Summary

Fields

protected int modCount

这个列表的 结构修改次数

Protected constructors

AbstractList()

唯一的构造函数。

Public methods

void add(int index, E element)

将指定元素插入此列表中的指定位置(可选操作)。

这个实现总是抛出一个 UnsupportedOperationException

boolean add(E e)

将指定的元素附加到此列表的末尾(可选操作)。

boolean addAll(int index, Collection<? extends E> c)

将指定集合中的所有元素插入指定位置的此列表中(可选操作)。

该实现获取指定集合的迭代器并对其进行迭代,并使用 add(int, E)一次一个地将从迭代器获取的元素插入到此列表中的适当位置。

void clear()

从此列表中删除所有元素(可选操作)。

boolean equals(Object o)

将指定的对象与此列表进行比较以获得相等性。

abstract E get(int index)

返回此列表中指定位置的元素。

int hashCode()

返回此列表的哈希码值。

int indexOf(Object o)

返回此列表中指定元素第一次出现的索引,如果此列表不包含元素,则返回-1。

该实现首先获取列表迭代器(使用 listIterator() )。

Iterator<E> iterator()

以适当的顺序返回此列表中元素的迭代器。

int lastIndexOf(Object o)

返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。

这个实现首先获得一个列表迭代器,指向列表的末尾(用 listIterator(size()) )。

ListIterator<E> listIterator(int index)

从列表中的指定位置开始,返回此列表中元素的列表迭代器(以正确的顺序)。

该实现返回 ListIterator接口的直接实现,该接口扩展了 iterator()方法返回的 Iterator接口的实现。

ListIterator<E> listIterator()

返回此列表中元素的列表迭代器(按适当顺序)。

该实现返回 listIterator(0)

E remove(int index)

删除此列表中指定位置的元素(可选操作)。

这个实现总是抛出一个 UnsupportedOperationException

E set(int index, E element)

用指定的元素替换此列表中指定位置的元素(可选操作)。

这个实现总是抛出一个 UnsupportedOperationException

List<E> subList(int fromIndex, int toIndex)

返回指定的 fromIndex (含)和 toIndex之间的此列表部分的视图,排他性。

该实现返回一个子类为 AbstractList的列表。

Protected methods

void removeRange(int fromIndex, int toIndex)

从列表中删除索引在 fromIndex (含)和 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

Fields

modCount

Added in API level 1
int modCount

这个列表的结构修改次数 结构修改是那些改变列表大小,或以其他方式扰乱它的方式,即正在进行的迭代可能产生不正确的结果。

该字段由iteratorlistIterator方法返回的迭代器和列表迭代器实现使用。 如果该字段的值意外更改,迭代器(或列表迭代器)将抛出ConcurrentModificationException响应nextremovepreviousset或者add操作。 这提供了故障快速行为,而不是在迭代期间并发修改中的非确定性行为。

按子类使用此字段是可选的。 如果子类希望提供快速迭代器(和列表迭代器),那么它只需在其add(int, E)remove(int)方法(以及任何其他覆盖该方法会导致对列表进行结构修改的方法)中增加该字段。 一次调用add(int, E)remove(int)必须在此字段中添加不超过一个,否则迭代器(和列表迭代器)将抛出伪造ConcurrentModificationExceptions 如果实现不希望提供快速迭代器,则该字段可能会被忽略。

Protected constructors

AbstractList

Added in API level 1
AbstractList ()

唯一的构造函数。 (对于子类构造函数的调用,通常是隐式的。)

Public methods

add

Added in API level 1
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

add

Added in API level 1
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

addAll

Added in API level 1
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

clear

Added in API level 1
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

equals

Added in API level 1
boolean equals (Object o)

将指定的对象与此列表进行比较以获得相等性。 当且仅当指定的对象也是一个列表时,返回true ,两个列表具有相同的大小,并且两个列表中的所有相应元素对都相等 (两个元件e1e2是如果等于 (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

get

Added in API level 1
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

hashCode

Added in API level 1
int hashCode ()

返回此列表的哈希码值。

该实现完全使用用于在 hashCode()方法的文档中定义列表散列函数的 hashCode()

Returns
int the hash code value for this list

indexOf

Added in API level 1
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

Added in API level 1
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

lastIndexOf

Added in API level 1
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

Added in API level 1
ListIterator<E> listIterator (int index)

从列表中的指定位置开始,返回此列表中元素的列表迭代器(以正确的顺序)。 指定的索引指示将通过初始调用返回到next的第一个元素。 初始调用previous会返回指定索引减1的元素。

该实现返回ListIterator接口的直接实现,该接口扩展了iterator()方法返回的Iterator接口的实现。 ListIterator实现依赖于后台列表的get(int)set(int, E)add(int, E)remove(int)方法。

请注意,此实现返回的列表迭代器将抛出一个 UnsupportedOperationException响应其 removesetadd方法,除非列表的 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

Added in API level 1
ListIterator<E> listIterator ()

返回此列表中元素的列表迭代器(按适当顺序)。

该实现返回 listIterator(0)

Returns
ListIterator<E> a list iterator over the elements in this list (in proper sequence)

也可以看看:

remove

Added in API level 1
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

set

Added in API level 1
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

subList

Added in API level 1
List<E> subList (int fromIndex, 
                int toIndex)

返回指定的fromIndex (含)和toIndex之间的此列表部分视图,不包括。 (如果fromIndextoIndex相等,则返回的列表是空的。)返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。 返回的列表支持此列表支持的所有可选列表操作。

此方法消除了对显式范围操作(数组通常存在的那种操作)的需要。 任何需要列表的操作都可以通过传递子列表视图而不是整个列表来用作范围操作。 例如,下面的习语从列表中删除了一系列元素:

      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)

Protected methods

removeRange

Added in API level 1
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

Hooray!