天天看點

AbstractList

AbstractList

java.util

類 AbstractList<E>

java.lang.Object

  java.util.AbstractCollection<E>

      java.util.AbstractList<E>

所有已實作的接口:

Iterable<E>, Collection<E>, List<E>

直接已知子類:

AbstractSequentialList, ArrayList, Vector

--------------------------------------------------------------------------------

public abstract class 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 的成員。

從以下版本開始:

1.2

另請參見:

Collection, List, AbstractSequentialList, AbstractCollection

--------------------------------------------------------------------------------

字段摘要

protected  int modCount

          已從結構上修改 此清單的次數。

  構造方法摘要

protected  AbstractList()

          單獨的構造方法。

  方法摘要

boolean add(E o)

          将指定的元素追加到此 List 的尾部(可選操作)。

void add(int index, E element)

          在此清單中指定的位置插入指定的元素(可選操作)。

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

          将指定 collection 中的所有元素插入此清單的指定位置(可選操作)。

void clear()

          從此 collection 中移除所有元素(可選操作)。

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

字段詳細資訊

modCount

protected transient int modCount已從結構上修改 此清單的次數。從結構上修改是指更改清單的大小,或者以其他方式打亂清單,使正在進行的疊代産生錯誤的結果。

此字段由 iterator 和 listIterator 方法傳回的疊代器和清單疊代器實作來使用。如果意外更改了此字段中的值,則疊代器(或清單疊代器)将抛出 ConcurrentModificationException 來響應 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)。

注意,除非重寫 add(int, Object),否則此實作将抛出 UnsupportedOperationException。

指定者:

接口 Collection<E> 中的 add

指定者:

接口 List<E> 中的 add

覆寫:

類 AbstractCollection<E> 中的 add

參數:

o - 要追加到此清單的元素。

傳回:

true(按照 Collection.add 的正常協定)。

抛出:

UnsupportedOperationException - 如果此 Set 不支援 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)将此清單中指定位置的元素替換為指定的元素(可選操作)。

此實作始終抛出 UnsupportedOperationException。

指定者:

接口 List<E> 中的 set

參數:

index - 要替換的元素的索引。

element - 要存儲在指定位置的元素。

傳回:

以前在指定位置處的元素。

抛出:

UnsupportedOperationException - 如果此 List 不支援 set 方法。

ClassCastException - 如果指定元素的類不允許該元素添加到此清單。

IllegalArgumentException - 如果指定元素的某方面不允許它添加到此清單。

IndexOutOfBoundsException - 如果指定的索引超出範圍 (index < 0 || index >= size())。

--------------------------------------------------------------------------------

add

public void add(int index,

                E element)在此清單中指定的位置插入指定的元素(可選操作)。向右移動目前處于該位置的元素(如果有)和所有後續元素(将其索引加 1)。

此實作始終抛出 UnsupportedOperationException。

指定者:

接口 List<E> 中的 add

參數:

index - 要插入指定元素的位置索引。

element - 要插入的元素。

抛出:

UnsupportedOperationException - 如果此 List 不支援 add 方法。

ClassCastException - 如果指定元素的類不允許該元素添加到此清單。

IllegalArgumentException - 如果指定元素的某方面不允許它添加到此清單。

IndexOutOfBoundsException - 索引超出範圍 (index < 0 || index > size())。

--------------------------------------------------------------------------------

remove

public E remove(int index)移除此清單中指定位置處的元素(可選操作)。向左移動所有後續元素(将其索引減 1)。傳回從清單中移除的元素。

此實作始終抛出 UnsupportedOperationException。

指定者:

接口 List<E> 中的 remove

參數:

index - 要移除的元素的索引。

傳回:

以前在指定位置處的元素。

抛出:

UnsupportedOperationException - 如果此 List 不支援 remove 方法。

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())。

注意,除非重寫 remove(int index) 或 removeRange(int fromIndex, int toIndex),否則此實作将抛出 UnsupportedOperationException。

指定者:

接口 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 中。

IndexOutOfBoundsException - 索引超出範圍 (index < 0 || index > size())。

NullPointerException - 如果指定的 collection 為 null。

--------------------------------------------------------------------------------

iterator

public Iterator<E> iterator()傳回以正确順序在此清單的元素上進行疊代的疊代器。

此實作傳回 iterator 接口的一個直接實作,具體取決于底層 list 的 size()、get(int) 和 remove(int) 方法。

注意,除非重寫該清單的 remove(int) 方法,否則此方法傳回的疊代器将抛出一個 UnsupportedOperationException 來響應其 remove 方法。

在面臨并發修改時,可以使此實作抛出運作時異常,如 (protected) modCount 字段規範中的描述。

指定者:

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