此類提供 List 接口的骨幹實現,從而最大限度地減少了實現由“隨機訪問”數據存儲(如數組)支持的接口所需的工作。對於連續的訪問數據(如鍊表),應優先使用AbstractSequentialList,而非此類。
基本介紹
- 中文名:AbstractList
- 外文名:java.util
- 類:AbstractList<E>
- 直接已知子類:AbstractSequentialList,
類型簡介,注意事項,方法摘要,欄位詳細信息,構造方法詳細信息,
類型簡介
java.util
類 AbstractList<E>
java.lang.Objectjava.util.AbstractCollection<E>
java.util.AbstractList<E>
所有已實現的接口:
Iterable<E>,Collection<E>,List<E>
直接已知子類:
AbstractSequentialList,ArrayList,Vector
public abstract class AbstractList<E>extends
注意事項
AbstractList<E> extends AbstractCollection<E> implements List<E> 此類提供 List 接口的骨幹實現,從而最大限度地減少了實現由“隨機訪問”數據存儲(如數組)支持的接口所需的工作。對於連續的訪問數據(如鍊表),應優先使用AbstractSequentialList,而非此類。
要實現不可修改的列表,程式設計師只需擴展此類,並提供 get(int index) 和 size() 方法的實現。
要實現可修改的列表,程式設計師還必須另外重寫 set(int index,Object element) 方法,否則將拋出 UnsupportedOperationException。如果列表為可變大小,則程式設計師必須另外重寫 add(int index,Object element) 和 remove(int index) 方法。
按照 Collection 接口規範中的推薦,程式設計師通常應該提供一個 void (無參數)和 collection構造方法。
與其他抽象 collection 實現不同,程式設計師不必 提供疊代器實現;疊代器和列表疊代器由此類在以下“隨機訪問”方法之上實現:get(int index)、set(int index,Object element)、set(int index,Object element)、add(int index,Object element) 和 remove(int index)。
此類中每個非抽象方法的文檔詳細描述了其實現。如果要實現的 collection 允許更有效的實現,則可以重寫這些方法中的每個方法。
此類是 Java Collections Framework 的成員。
從以下版本開始:
⒈2
另請參見:
Collection,List,AbstractSequentialList,AbstractCollection
欄位摘要
protectedint modCount
已從結構上修改 此列表的次數。
構造方法摘要
protectedAbstractList()
單獨的構造方法。
方法摘要
boolean add(E o)
將指定的元素追加到此 List 的尾部(可選操作)。
void add(int index,E element)
在此列表中指定的位置插入指定的元素(可選操作)。
boolean addAll(int index,Collection<? extends E> c)
void clear()
從此 collection 中移除所有元素(可選操作)。
boolean equals(Object o)
將指定的對象與此列表進行相等性比較。
abstractE 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)
移除此列表中指定位置處的元素(可選操作)。
protectedvoid removeRange(int fromIndex,int toIndex)
E set(int index,E element)
將此列表中指定位置的元素替換為指定的元素(可選操作)。
List<E> subList(int fromIndex,int toIndex)
從類 java.util.AbstractCollection 繼承的方法
addAll,contains,containsAll,isEmpty,remove,removeAll,retainAll,size,toArray,toArray,toString
從類 java.lang.Object 繼承的方法
clone,finalize,getClass,notify,notifyAll,wait,wait,wait
從接口 java.util.List 繼承的方法
addAll,contains,containsAll,isEmpty,remove,removeAll,retainAll,size,toArray,toArray
欄位詳細信息
modCount
protected transient int modCount已從結構上修改 此列表的次數。從結構上修改是指更改列表的大小,或者以其他方式打亂列表,使正在進行的疊代產生錯誤的結果。
此欄位由 iterator 和 listIterator 方法返回的疊代器和列表疊代器實現來使用。如果意外更改了此欄位中的值,則疊代器(或列表疊代器)將拋出 Concurrent Modification Exception 來回響 next、remove、previous、set 或 add 操作。在疊代期間面臨並發修改時,它提供了快速失敗 行為,而不是非確定性行為。
子類是否使用此欄位是可選的。如果子類希望提供快速失敗疊代器(和列表疊代器),則它只需在其 add(int,Object) 和 remove(int) 方法(以及它所重寫的、導致列表結構上修改的任何其他方法)中增加此欄位。對 add(int,Object) 或 remove(int) 的單個調用向此欄位添加的數量不得超過 1,否則疊代器(和列表疊代器)將拋出虛假的 ConcurrentModificationExceptions。如果某個實現不希望提供快速失敗疊代器,則可以忽略此欄位。
構造方法詳細信息
AbstractList
protected AbstractList()單獨的構造方法。(由子類構造方法調用,通常是隱式的。)
方法詳細信息
add
public boolean add(E o)將指定的元素追加到此 List 的尾部(可選操作)。
此實現調用 add(size(),o)。
指定者:
接口 Collection<E> 中的 add
指定者:
接口 List<E> 中的 add
覆蓋:
類 AbstractCollection<E> 中的 add
參數:
o - 要追加到此列表的元素。
返回:
true(按照 Collection.add 的常規協定)。
拋出:
ClassCastException - 如果指定元素的類不允許該元素添加到此 set 中。
IllegalArgumentException - 此元素的某方面不允許它添加到此 collection 中。
get
public abstract E get(int index)返回此列表中指定位置處的元素。
指定者:
接口 List<E> 中的 get
參數:
index - 要返回的元素的索引。
返回:
列表中指定位置的元素。
拋出:
IndexOutOfBoundsException - 如果給定的索引超出範圍 (index < 0 || index >= size())。
set
public E set(int index,
E element)將此列表中指定位置的元素替換為指定的元素(可選操作)。
指定者:
接口 List<E> 中的 set
參數:
index - 要替換的元素的索引。
element - 要存儲在指定位置的元素。
返回:
以前在指定位置處的元素。
拋出:
add
public void add(int index,
E element)在此列表中指定的位置插入指定的元素(可選操作)。向右移動當前處於該位置的元素(如果有)和所有後續元素(將其索引加 1)。
指定者:
接口 List<E> 中的 add
參數:
index - 要插入指定元素的位置索引。
element - 要插入的元素。
拋出:
UnsupportedOperationException - 如果此 List 不支持 add 方法。
ClassCastException - 如果指定元素的類不允許該元素添加到此列表。
IllegalArgumentException - 如果指定元素的某方面不允許它添加到此列表。
remove
public E remove(int index)移除此列表中指定位置處的元素(可選操作)。向左移動所有後續元素(將其索引減 1)。返回從列表中移除的元素。
此實現始終拋出 UnsupportedOperationException。
指定者:
接口 List<E> 中的 remove
參數:
index - 要移除的元素的索引。
返回:
以前在指定位置處的元素。
拋出:
IndexOutOfBoundsException - 如果指定的索引超出範圍 (index < 0 || index >= size())。
indexOf
public int indexOf(Object o)返回此列表中首次出現指定元素的索引,如果列表中不包含此元素,則返回 -1。更正式地說,返回滿足以下條件的最低索引 i:(o==null get(i)==null :o.equals(get(i))),如果沒有滿足此條件的索引,則返回 -1。
此實現首先獲取一個列表疊代器(使用 listIterator())。然後它疊代列表,直至找到指定的元素,或者到達列表的末尾。
指定者:
接口 List<E> 中的 indexOf
參數:
o - 要搜尋的元素。
返回:
此列表中首次出現指定元素的索引,如果列表中不包含此元素,則返回 -1。
lastIndexOf
public int lastIndexOf(Object o)返回此列表中最後出現指定元素的索引,如果列表中不包含此元素,則返回 -1。更正式地說,返回滿足以下條件的最高索引 i:(o==null get(i)==null :o.equals(get(i))),如果沒有滿足此條件的此索引,則返回 -1。
此實現首先獲取一個指向列表末尾的列表疊代器(使用 listIterator(size()))。然後它反向疊代列表,直至找到指定的元素,或者到達列表的開頭。
指定者:
接口 List<E> 中的 lastIndexOf
參數:
o - 要搜尋的元素。
返回:
此列表中最後出現指定元素的索引,如果列表中不包含此元素,則返回 -1。
clear
public void clear()從此 collection 中移除所有元素(可選操作)。此調用返回後,該 collection 將為空(除非它拋出異常)。
此實現調用 removeRange(0,size())。
指定者:
接口 Collection<E> 中的 clear
指定者:
接口 List<E> 中的 clear
覆蓋:
類 AbstractCollection<E> 中的 clear
拋出:
UnsupportedOperationException - 如果此 Collection 不支持 clear 方法。
addAll
public boolean addAll(int index,
Collection<? extends E> c)將指定 collection 中的所有元素插入此列表的指定位置(可選操作)。向右移動當前處於該位置的元素(如果有)和所有後續元素(增加其索引)。新元素將按由指定 collection 的疊代器所返回的順序出現在列表中。如果在該操作進行過程中修改了指定的 collection,則未指定此操作的行為。(注意,如果指定的 collection 為此列表,而且該列表非空,則會發生此行為。)
此實現獲取指定 collection 上的疊代器,且疊代此 collection,並使用 add(int,Object) 將疊代器獲取的元素插入此列表的適當位置,一次插入一個。為了提高效率,多數實現將重寫此方法。
注意,除非重寫 add(int,Object),否則此實現將拋出 UnsupportedOperationException。
指定者:
接口 List<E> 中的 addAll
參數:
index - 在其中插入指定 collection 中第一個元素的索引。
c - 要插入此列表的元素。
返回:
如果此列表由於此方法的調用而發生改變,則返回 true。
拋出:
UnsupportedOperationException - 如果此列表不支持 addAll 方法。
ClassCastException - 如果指定 collection 的元素的類不允許該元素添加到此 List 中。
IllegalArgumentException - 指定 collection 的元素的某方面不允許它添加到此 List 中。
NullPointerException - 如果指定的 collection 為 null。
iterator
public Iterator<E> iterator()返回以正確順序在此列表的元素上進行疊代的疊代器。
此實現返回 iterator 接口的一個直接實現,具體取決於底層 list 的 size()、get(int) 和 remove(int) 方法。
注意,除非重寫該列表的 remove(int) 方法,否則此方法返回的疊代器將拋出一個 UnsupportedOperationException 來回響其 remove 方法。
指定者:
接口 Iterable<E> 中的 iterator
指定者:
接口 Collection<E> 中的 iterator
指定者:
接口 List<E> 中的 iterator
指定者:
類 AbstractCollection<E> 中的 iterator
返回:
以正確順序在此列表的元素上進行疊代的疊代器。
另請參見:
modCount
listIterator
public ListIterator<E> listIterator()返回此列表中的元素的疊代器(按適當順序)。此實現返回 listIterator(0)。
指定者:
接口 List<E> 中的 listIterator
返回:
此列表中的元素的疊代器(按適當順序)。
另請參見:
listIterator(int)
listIterator
public ListIterator<E> listIterator(int index)從列表中的指定位置開始,返回此列表中的元素的列表疊代器(按適當順序)。指定的索引指示初始調用 next 方法將返回的第一個元素。對 previous 方法的初始調用將返回指定索引減 1 處的元素。
此實現返回 ListIterator 接口的直接實現,擴展了由 iterator() 方法返回的 Iterator 接口的實現。ListIterator 實現依賴於底層 list 的 get(int)、set(int,Object)、add(int,Object) 和 remove(int) 方法。
注意,除非重寫列表的 remove(int)、set(int,Object) 和 add(int,Object) 方法,否則此實現返回的列表疊代器將拋出 UnsupportedOperationException 來回響其 remove、set 和 add。
在面臨並發修改時,可以使此實現拋出運行時異常,如 (protected) modCount 欄位規範中的描述。
指定者:
接口 List<E> 中的 listIterator
參數:
index - 要從列表疊代器返回的第一個元素的索引(通過調用 next 方法)。
返回:
此列表中的元素的列表疊代器(按適當順序),而且從列表中的指定位置開始。
拋出:
IndexOutOfBoundsException - 如果指定的索引超出範圍 (index < 0 || index > size())。
另請參見:
modCount
subList
public List<E> subList(int fromIndex,
int toIndex)返回此列表 fromIndex(包括)和 toIndex(不包括)之間部分的視圖。(如果 fromIndex 和 toIndex 相等,則返回的列表為空。)返回的列表由此列表支持,因此返回列表中的更改將反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可選列表操作。
此方法省去了顯式範圍操作(此操作通常針對數組存在)。通過操作 subList 視圖而非整個列表,期望列表的任何操作可用作範圍操作。例如,下面的語句從列表中移除了某個範圍內的元素:
list.subList(from,to).clear();
可以對 indexOf 和 lastIndexOf 構造類似的語句,而且 Collections 類中的所有算法都可以套用於 subList。
如果以任何其他方式(而不是通過返回的列表)從結構上修改 了底層列表(即此列表),則此方法返回的列表語義將變為未定義。(從結構上修改是指更改列表的大小,或者以其他方式打亂列表,使正在進行的疊代產生錯誤的結果。)
此實現返回一個為 AbstractList 創建子類的列表。子類在 private 欄位中存儲底層列表中 subList 的偏移量、subList 的大小(隨其生存期而變化)以及底層列表的預期 modCount 值。子類有兩個變體,其中一個實現 RandomAccess。如果此列表實現 RandomAccess,則返回的列表將為實現 RandomAccess 的一個子類實例。
子類的 set(int,Object)、get(int)、add(int,Object)、remove(int)、addAll(int,Collection) 和 removeRange(int,int) 方法在對索引進行邊界檢查和調整偏移量之後,都委託給底層抽象列表上的相應方法。addAll(Collection c) 方法僅返回 addAll(size,c)。
listIterator(int) 方法返回底層列表的列表疊代器上的“包裝器對象”,使用底層列表上的相應方法創建該疊代器。iterator 方法僅返回 listIterator(),且 size 方法僅返回子類的 size 欄位。
所有方法都將首先檢查底層列表的實際 modCount 是否與其預期的值相等,並且在不相等時將拋出 ConcurrentModificationException。
指定者:
接口 List<E> 中的 subList
參數:
fromIndex - subList 的低端點(包括)。
toIndex - subList 的高端點(不包括)。
返回:
列表中指定範圍的視圖。
拋出:
IndexOutOfBoundsException - 端點索引值超出範圍 (fromIndex < 0 || toIndex > size)
IllegalArgumentException - 端點索引順序顛倒 (fromIndex > toIndex)
equals
public boolean equals(Object o)將指定的對象與此列表進行相等性比較。若且唯若指定的對象也是一個列表,兩個列表具有相同的大小,而且兩個列表中所有相應的元素對都相等 時,才返回 true。(如果 (e1==null e2==null :e1.equals(e2)),則元素 e1 和 e2 相等。)換句話說,如果兩個列表包含相同的元素,且元素的順序也相同,才將它們定義為相等。
此實現首先檢查指定的對象是否為此列表。如果是,則返回 true;否則,它將檢查指定的對象是否為一個列表。如果不是,它將返回 false;如果是,它將疊代兩個列表,比較相應的元素對。如果有任何比較結果返回 false,則此方法將返回 false。如果某中某個疊代器在另一疊代器之前完全疊代元素,則會返回 false(因為列表是不等長的);否則,在疊代完成時將返回 true。
指定者:
接口 Collection<E> 中的 equals
指定者:
接口 List<E> 中的 equals
覆蓋:
類 Object 中的 equals
參數:
o - 與此列表進行相等性比較的對象。
返回:
如果指定對象與此列表相等,則返回 true。
另請參見:
Object.hashCode(),Hashtable
hashCode
public int hashCode()返回此列表的哈希代碼值。
此實現準確使用在 List.hashCode 方法的文檔中用於定義列表哈希函式的代碼。
指定者:
接口 Collection<E> 中的 hashCode
指定者:
接口 List<E> 中的 hashCode
覆蓋:
類 Object 中的 hashCode
返回:
此列表的哈希代碼值。
另請參見:
Object.equals(java.lang.Object),Hashtable
removeRange
protected void removeRange(int fromIndex,
int toIndex)從此列表中移除其索引在 fromIndex(包括)和 toIndex(不包括)之間的所有元素。向左移動所有後續元素(減小其索引)。此調用縮短了 ArrayList,將其減少了 (toIndex - fromIndex) 個元素。(如果 toIndex==fromIndex,則此操作無效。)
此方法由此列表及其 subList 上的 clear 操作調用。重寫此方法以利用內部列表實現可以極大地 改進此列表及其 subList 上 clear 操作的性能。
此實現獲取一個在 fromIndex 之前放置的列表疊代器,並在移除該範圍內的元素前重複調用 ListIterator.next(後跟 ListIterator.remove)。註:如果 ListIterator.remove 需要線性時間,則此實現需要平方時間。
參數:
fromIndex - 要移除的第一個元素的索引。
toIndex - 要移除的最後一個元素之後的索引。