AbstractList

此類提供 List 接口的骨幹實現,從而最大限度地減少了實現由“隨機訪問”數據存儲(如數組)支持的接口所需的工作。對於連續的訪問數據(如鍊表),應優先使用AbstractSequentialList,而非此類。

類型簡介

java.util

類 AbstractList<E>

AbstractList AbstractList

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 - 要移除的最後一個元素之後的索引。

相關詞條

相關搜尋

熱門詞條

聯絡我們