|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E>
public abstract class AbstractList<E>
此類別提供 List
介面的骨幹實作,以最大限度地減少實作「隨機存取」資料存儲(如陣列)支持的該介面所需的工作。對於連續的存取資料(如鏈表),應優先使用 AbstractSequentialList
,而不是此類別。
要實作不可修改的列表,程式人員只需擴展此類別,並提供 get(int)
和 size()
方法的實作。
要實作可修改的列表,程式人員必須另外覆寫 set(int, E)
方法(否則將拋出 UnsupportedOperationException
)。如果列表為可變大小,則程式人員必須另外覆寫 add(int, E)
和 remove(int)
方法。
按照 Collection
介面規範中的建議,程式人員通常應該提供一個 void(無參數)和 collection 建構子。
與其他抽象 collection 實作不同,程式人員不必 提供迭代器實作;迭代器和列表迭代器由此類別在以下「隨機存取」方法上實作:get(int)
、set(int, E)
、add(int, E)
和 remove(int)
。
此類別中每個非抽象方法的文檔詳細描述了其實作。如果要實作的 collection 允許更有效的實作,則可以覆寫所有這些方法。
此類別是 Java Collections Framework 的成員。
欄位摘要 | |
---|---|
protected int |
modCount
已從結構上修改 此列表的次數。 |
建構子摘要 | |
---|---|
protected |
AbstractList()
唯一的建構子。 |
方法摘要 | |
---|---|
boolean |
add(E e)
將指定的元素添加到此列表的尾部(可選操作)。 |
void |
add(int index,
E element)
在列表的指定位置插入指定元素(可選操作)。 |
boolean |
addAll(int index,
Collection<? extends E> c)
將指定 collection 中的所有元素都插入到列表中的指定位置(可選操作)。 |
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(不包括)之間的部分視圖。 |
從類別 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 |
欄位詳細資訊 |
---|
protected transient int modCount
此欄位由 iterator
和 listIterator
方法返回的迭代器和列表迭代器實作使用。如果意外更改了此欄位中的值,則迭代器(或列表迭代器)將拋出 ConcurrentModificationException
來回應 next
、remove
、previous
、set
或 add
操作。在迭代期間面臨共時修改時,它提供了快速失敗 行為,而不是非確定性行為。
子類別是否使用此欄位是可選的。如果子類別希望提供快速失敗迭代器(和列表迭代器),則它只需在其 add(int, E)
和 remove(int)
方法(以及它所覆寫的、導致列表結構上修改的任何其他方法)中增加此欄位。對 add(int, E)
或 remove(int)
的單個調用向此欄位添加的數量不得超過 1,否則迭代器(和列表迭代器)將拋出虛假的 ConcurrentModificationExceptions
。如果某個實作不希望提供快速失敗迭代器,則可以忽略此欄位。
建構子詳細資訊 |
---|
protected AbstractList()
方法詳細資訊 |
---|
public boolean add(E e)
支持此操作的列表可能對列表可以添加的元素做出一些限制。具體來說,某些列表將拒絕添加 null 元素,另一些列表將在可以添加的元素型別上施加限制。List 類別應該在它們的文檔中明確指定可以添加何種元素的所有限制。
此實作調用 add(size(), e)
。
注意,除非覆寫 add(int, E)
,否則此實作將拋出 UnsupportedOperationException
。
Collection<E>
中的 add
List<E>
中的 add
AbstractCollection<E>
中的 add
e
- 將添加到此列表的元素
true
(正如 Collection.add(E)
所指定的那樣)
UnsupportedOperationException
- 如果此列表不支持 add
操作
ClassCastException
- 如果指定元素的類別不允許將該元素添加到此列表
NullPointerException
- 如果指定元素為 null 並且此列表不允許使用 null 元素
IllegalArgumentException
- 如果此元素的某些屬性不允許將該元素添加到此列表public abstract E get(int index)
List<E>
中的 get
index
- 要返回的元素的索引
IndexOutOfBoundsException
- 如果索引超出範圍 (index < 0 || index >= size())public E set(int index, E element)
此實作始終拋出 UnsupportedOperationException
。
List<E>
中的 set
index
- 要替換的元素的索引element
- 要在指定位置存儲的元素
UnsupportedOperationException
- 如果列表不支持 set 操作
ClassCastException
- 如果指定元素的類別不允許它添加到此列表
NullPointerException
- 如果指定的元素為 null,並且此列表不允許 null 元素
IllegalArgumentException
- 如果指定元素的某些屬性不允許它添加到此列表
IndexOutOfBoundsException
- 如果索引超出範圍 (index < 0 || index >= size())public void add(int index, E element)
此實作始終拋出 UnsupportedOperationException
。
List<E>
中的 add
index
- 要在其中插入指定元素處的索引element
- 要插入的元素
UnsupportedOperationException
- 如果列表不支持 add 操作
ClassCastException
- 如果指定元素的類別不允許它添加到此列表
NullPointerException
- 如果指定的元素為 null,並且此列表不允許 null 元素
IllegalArgumentException
- 如果指定元素的某些屬性不允許它添加到此列表
IndexOutOfBoundsException
- 如果索引超出範圍 (index < 0 || index > size())public E remove(int index)
此實作始終拋出 UnsupportedOperationException
。
List<E>
中的 remove
index
- 要移除的元素的索引
UnsupportedOperationException
- 如果列表不支持 remove 操作
IndexOutOfBoundsException
- 如果索引超出範圍 (index < 0 || index >= size())public int indexOf(Object o)
此實作首先獲取一個列表迭代器(使用 listIterator()
)。然後它迭代列表,直至找到指定的元素,或者到達列表的末尾。
List<E>
中的 indexOf
o
- 要搜尋的元素
ClassCastException
- 如果指定元素的型別和此列表不相容(可選)
NullPointerException
- 如果指定的元素是 null,並且此列表不允許 null 元素(可選)public int lastIndexOf(Object o)
此實作首先獲取一個指向列表末尾的列表迭代器(使用 listIterator(size())
)。然後它逆向迭代列表,直至找到指定的元素,或者到達列表的開頭。
List<E>
中的 lastIndexOf
o
- 要搜尋的元素
ClassCastException
- 如果指定元素的型別和此列表不相容(可選)
NullPointerException
- 如果指定的元素是 null,並且此列表不允許 null 元素(可選)public void clear()
此實作調用 removeRange(0, size())
。
注意,除非覆寫 remove(int
index)
或 removeRange(int fromIndex, int toIndex)
,否則此實作將拋出 UnsupportedOperationException
。
Collection<E>
中的 clear
List<E>
中的 clear
AbstractCollection<E>
中的 clear
UnsupportedOperationException
- 如果此列表不支持 clear
操作。public boolean addAll(int index, Collection<? extends E> c)
此實作獲取指定 collection 上的迭代器并迭代它,使用 add(int, E)
將迭代器獲取的元素插入此列表的適當位置,一次一個。為了提高效率,多數實作將覆寫此方法。
注意,除非覆寫 add(int, E)
,否則此實作將拋出 UnsupportedOperationException
。
List<E>
中的 addAll
index
- 將指定 collection 的第一個元素所插入位置的索引c
- 套件含要添加到此列表的元素的 collection
UnsupportedOperationException
- 如果列表不支持 addAll 操作
ClassCastException
- 如果指定 collection 中某個元素的類別不允許它添加到此列表
NullPointerException
- 如果指定的 collection 套件含一個或多個 null 元素,並且該列表不允許 null 元素,或者指定的 collection 為 null
IllegalArgumentException
- 如果指定 collection 的元素的某些屬性不允許它添加到此列表
IndexOutOfBoundsException
- 如果索引超出範圍 (index < 0 || index > size())public Iterator<E> iterator()
此實作返回 iterator 介面的一個直接實作,具體取決於底層實作列表的 size()
、get(int)
和 remove(int)
方法。
注意,除非覆寫列表的 remove(int)
方法,否則此方法返回的迭代器將拋出一個 UnsupportedOperationException
來回應其 remove
方法。
根據 (protected) modCount
欄位規範中的描述,在面臨共時修改時,可以使此實作拋出運行時異常。
Iterable<E>
中的 iterator
Collection<E>
中的 iterator
List<E>
中的 iterator
AbstractCollection<E>
中的 iterator
modCount
public ListIterator<E> listIterator()
List<E>
中的 listIterator
此實作返回 listIterator(0)
。
listIterator(int)
public ListIterator<E> listIterator(int index)
next
的初始調用所返回的第一個元素。previous
方法的初始調用將返回索引比指定索引少 1 的元素。
此實作返回 ListIterator
介面的直接實作,擴展了由 iterator()
方法返回的 Iterator
介面的實作。ListIterator
實作依賴於底層實作列表的 get(int)
、set(int, E)
、add(int, E)
和 remove(int)
方法。
注意,除非覆寫列表的 remove(int)
、set(int, E)
和 add(int, E)
方法,否則此實作返回的列表迭代器將拋出 UnsupportedOperationException
來回應其 remove
、set
和 add
方法。
根據 (protected) modCount
欄位規範中的描述,在面臨共時修改時,可以使此實作拋出運行時異常。
List<E>
中的 listIterator
index
- 從列表迭代器返回的第一個元素的索引(通過調用 next 方法)
IndexOutOfBoundsException
- 如果索引超出範圍 (index < 0 || index > size())modCount
public List<E> subList(int fromIndex, int toIndex)
此方法省去了顯式範圍操作(此操作通常針對陣列存在)。通過傳遞 subList 視圖而非整個列表,期望列表的任何操作可用作範圍操作。例如,下面的語句從列表中移除了元素的範圍:
list.subList(from, to).clear();可以對 indexOf 和 lastIndexOf 建構類似的語句,而且 Collections 類別中的所有演算法都可以應用於 subList。
如果支持列表(即此列表)通過任何其他方式(而不是通過返回的列表)從結構上修改,則此方法返回的列表語義將變為未定義(從結構上修改是指更改列表的大小,或者以其他方式打亂列表,使正在進行的迭代產生錯誤的結果)。
此實作返回一個子類別化 AbstractList
的列表。子類別在 private 欄位中存儲底層實作列表中 subList 的偏移量、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
。
List<E>
中的 subList
fromIndex
- subList 的低端(包括)toIndex
- subList 的高端(不包括)
IndexOutOfBoundsException
- 端點索引值超出範圍 (fromIndex < 0 || toIndex > size)
IllegalArgumentException
- 端點索引順序顛倒 (fromIndex > toIndex)
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
public int hashCode()
此實作使用在 List.hashCode()
方法的文檔中用於定義列表雜湊函數的程式碼。
Collection<E>
中的 hashCode
List<E>
中的 hashCode
Object
中的 hashCode
Object.equals(java.lang.Object)
,
Hashtable
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
- 要移除的最後一個元素之後的索引。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。