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
接口规范。
不像其他的抽象的集合的实现,程序员不不需要提供一个迭代器的实现;迭代器和列表迭代器该类实现的,在顶部的“随机”方法:get(int)
,set(int, E)
,add(int, E)
和remove(int)
。
这个类中的每个非抽象方法的文档都详细描述了它的实现。这些方法可以被重写如果集合采取了更有效的实现。
这个班的一员 Java Collections Framework。
Modifier and Type | Field and Description |
---|---|
protected int |
modCount
这个名单已经结构改性次数。
|
Modifier | Constructor and Description |
---|---|
protected |
AbstractList()
唯一的构造函数。
|
Modifier and Type | Method and Description |
---|---|
boolean |
add(E e)
将指定的元素到这个列表的末尾(可选操作)。
|
void |
add(int index, E element)
在列表中指定的位置上插入指定的元素(可选操作)。
|
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这份名单的部分,独家。
|
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, size, toArray, toArray, toString
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
addAll, contains, containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, size, sort, spliterator, toArray, toArray
parallelStream, removeIf, stream
protected transient int modCount
这场由迭代器和列表迭代器的实现使用的iterator
和listIterator
方法返回。如果该域的值被意外更改,迭代器(列表迭代器)将ConcurrentModificationException
应对next
,remove
,previous
,set
或add
操作。这提供了快速失败行为,而不是在遇到同步修改迭代过程中的不确定性的行为。
使用这个字段的子类是可选的。如果子类希望提供快速失败迭代器(和列表迭代器),那么它仅仅有增量的add(int, E)
和remove(int)
方法这场(和任何其他方法,它覆盖在表结构修改的结果)。对add(int, E)
或remove(int)
单一调用必须添加不超过一到这一领域,或迭代器(和列表迭代器)将把虚假的ConcurrentModificationExceptions
。如果实现不希望提供快速失败迭代器,这个字段可以忽略。
public boolean add(E e)
支持此操作的列表可能会将哪些元素添加到该列表中的限制。特别是,一些列表将拒绝添加空元素,而其他人将对可能添加的元素的类型施加限制。列表类应该清楚地在他们的文档中指定任何可能添加的元素的限制。
这要求执行add(size(), e)
。
请注意,此实现抛出一个UnsupportedOperationException
除非add(int, E)
重写。
add
接口
Collection<E>
add
接口
List<E>
add
方法重写,继承类
AbstractCollection<E>
e
元素附加到列表
true
(由
Collection.add(E)
指定)
UnsupportedOperationException
-如果
add
操作不该列表支持
ClassCastException
-如果指定元素类型阻止其加入列表
NullPointerException
-如果指定元素为null,这个列表不允许null元素
IllegalArgumentException
-如果该元素的一些特性阻止其加入列表
public abstract E get(int index)
get
接口
List<E>
index
索引元素的回归
IndexOutOfBoundsException
如果索引超出范围(
index < 0 || index >= size())
public E set(int index, E element)
这个实现总是抛出一个UnsupportedOperationException
。
set
接口
List<E>
index
索引的元素代替
element
元素被存储在指定的位置
UnsupportedOperationException
-如果
set操作不该列表支持
ClassCastException
-如果指定元素类型阻止其加入列表
NullPointerException
-如果指定元素为null,这个列表不允许null元素
IllegalArgumentException
-如果指定元素的一些特性阻止其加入列表
IndexOutOfBoundsException
如果索引超出范围(
index < 0 || index >= size())
public void add(int index, E element)
这个实现总是抛出一个UnsupportedOperationException
。
add
接口
List<E>
index
指数在指定的元素被插入
element
元素被插入
UnsupportedOperationException
-如果
add操作不该列表支持
ClassCastException
-如果指定元素类型阻止其加入列表
NullPointerException
-如果指定元素为null,这个列表不允许null元素
IllegalArgumentException
-如果指定元素的一些特性阻止其加入列表
IndexOutOfBoundsException
如果索引超出范围(
index < 0 || index > size())
public E remove(int index)
这个实现总是抛出一个UnsupportedOperationException
。
remove
接口
List<E>
index
-要被删除的元素的索引
UnsupportedOperationException
-如果
remove操作不该列表支持
IndexOutOfBoundsException
如果索引超出范围(
index < 0 || index >= size())
public int indexOf(Object o)
实现首先获取列表迭代器(与listIterator()
)。然后,遍历列表,直到找到指定元素或列表的结束。
indexOf
接口
List<E>
o
元搜索
ClassCastException
-如果指定元素的类型与此列表不兼容(
optional)
NullPointerException
-如果指定元素为null,这个列表不允许null元素(
optional)
public int lastIndexOf(Object o)
实现首先获取列表迭代器指向列表的末尾(与listIterator(size())
)。然后,就倒在列表直到找到指定元素,或列表的开始了。
lastIndexOf
接口
List<E>
o
元搜索
ClassCastException
-如果指定元素的类型与此列表不兼容(
optional)
NullPointerException
-如果指定元素为null,这个列表不允许null元素(
optional)
public void clear()
这要求执行removeRange(0, size())
。
请注意,此实现抛出一个UnsupportedOperationException
除非remove(int index)
或removeRange(int fromIndex, int toIndex)
重写。
clear
接口
Collection<E>
clear
接口
List<E>
clear
方法重写,继承类
AbstractCollection<E>
UnsupportedOperationException
-如果
clear
操作不该列表支持
public boolean addAll(int index, Collection<? extends E> c)
这个实现获取迭代器在指定集合的遍历,插入从迭代器在列表的适当位置的元素,一次一个,用add(int, E)
。许多实现将重写此方法的效率。
请注意,此实现抛出一个UnsupportedOperationException
除非add(int, E)
重写。
addAll
接口
List<E>
index
指数,从指定集合的第一个元素的插入
c
收集含有的元素被添加到列表
UnsupportedOperationException
-如果
addAll操作不该列表支持
ClassCastException
-如果指定集合的元素的类,防止它被添加到列表
NullPointerException
-如果指定集合包含一个或多个null元素而列表不允许null元素,或者指定集合为空
IllegalArgumentException
-如果指定集合的一个元素的一些特性阻止其加入列表
IndexOutOfBoundsException
如果索引超出范围(
index < 0 || index > size())
public Iterator<E> iterator()
此实现返回一个简单的实现迭代器接口,依靠支持列表的size()
,get(int)
,和remove(int)
方法。
请注意,此方法返回的迭代器将抛出针对remove
方法UnsupportedOperationException
除非列表的remove(int)
方法被重写。
这个实现可以使抛出运行时异常中遇到同步修改,如说明书中描述的(保护)modCount
场。
public ListIterator<E> listIterator()
此实现返回listIterator(0)
。
listIterator
接口
List<E>
listIterator(int)
public ListIterator<E> listIterator(int index)
next
。对
previous
初始调用将返回与指定的指数减一元。
此实现返回一个简单的实现的ListIterator
接口扩展的Iterator
接口实现的iterator()
方法返回。ListIterator
的实现依赖于支持列表的get(int)
,set(int, E)
,add(int, E)
和remove(int)
方法。
请注意,此实现返回的列表迭代器将抛出针对remove
一UnsupportedOperationException
,set
和add
方法除非列表的remove(int)
,set(int, E)
,和add(int, E)
方法重写。
这个实现可以使抛出运行时异常中遇到同步修改,如说明书中描述的(保护)modCount
场。
listIterator
接口
List<E>
index
索引的第一个元素是列表迭代器返回(通过调用
next
)
IndexOutOfBoundsException
如果索引超出范围(
index < 0 || index > size()
)
public List<E> subList(int fromIndex, int toIndex)
此方法消除了对显式范围操作(通常用于数组的排序)的需要。任何希望将列表作为一系列操作通过一个子视图而不是整个列表。例如,下面的成语从列表中移除了一系列元素:
list.subList(from, to).clear();
相似的习语可以构造
indexOf和
lastIndexOf,和所有在
Collections类算法可以应用到列表。
列表的语义,该方法返回的是如果支持列表(即,这个列表)是通过返回的列表结构改性以外的其他任何方式。(结构上的修改是指改变这个名单,大小或其他方式,迭代的进展可能会产生不正确的结果。)
此实现返回一个类AbstractList
列表。子类的商店,在私人领域,在支持列表的子列表的偏移,子列表的大小(可以在其生命周期的变化),和预期的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
。
subList
接口
List<E>
fromIndex
低端点(含)的子列表
toIndex
高端点(独家)的子列表
IndexOutOfBoundsException
-如果一个端点索引值超出范围
(fromIndex < 0 || toIndex > size)
IllegalArgumentException
如果终点指标是为了
(fromIndex > toIndex)
public boolean equals(Object o)
true
当且仅当指定的对象也是一个列表,列表中有相同的大小,并在两个列表元素的所有相应的对平等的。(二元
e1
和
e2
是平等的如果
(e1==null ? e2==null : e1.equals(e2))
。)换句话说,两个列表的定义就包含在同一顺序相同的元素。
此实现首先检查指定的对象是否是此列表。如果是这样的话,它的回报true
;如果没有,检查是否指定对象列表。如果没有,则返回false
;如果这样,它会遍历列表,比较对应的元素对。如果有比较返回false
,此方法返回false
。如果其中一个的遍历元素在其他它返回false
(如列表不等长);否则返回true
迭代完成时。
equals
接口
Collection<E>
equals
接口
List<E>
equals
方法重写,继承类
Object
o
-同当前列表比较相等性的对象
true
指定对象是否等于此列表
Object.hashCode()
,
HashMap
public int hashCode()
这个程序使用完全的代码,用于定义列表的哈希函数的文档中的List.hashCode()
方法。
hashCode
接口
Collection<E>
hashCode
接口
List<E>
hashCode
方法重写,继承类
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
protected void removeRange(int fromIndex, int toIndex)
fromIndex
之间,包容性,和
toIndex
,独家。将任何成功的元素转移到左边(降低它们的索引)。这叫缩短列表
(toIndex - fromIndex)
元素。(如果
toIndex==fromIndex
,此操作没有影响。)
通过调用此方法clear
操作在此列表及其子列表。重写此方法以利用列表的内部实现可以基本上改善此列表及其子列表的clear
运行性能。
这个实现获取列表迭代器定位之前fromIndex
,反复调用ListIterator.next
随后ListIterator.remove
直到整个范围被删除。注意:如果ListIterator.remove
需要线性时间,这个实现需要二次的时间。
fromIndex
-第一个元素被删除索引
toIndex
-要删除的最后一个元素后的指标
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.