鴻蒙OS AbstractList

2022-07-05 16:24 更新

AbstractList

java.lang.Object

|---java.util.AbstractCollection<E&

|---|---java.util.AbstractList<E&

public abstract class AbstractList<E>
extends AbstractCollection<E>
implements List<E>

此類提供 List 接口的骨架實現,以最大限度地減少實現此接口所需的工作,該接口由“隨機訪問”數據存儲(例如數組)支持。對于順序訪問數據(如鏈表),應優(yōu)先使用 AbstractSequentialList 而非此類。

要實現一個不可修改的列表,程序員只需要擴展這個類并提供 get(int) 和 List#size() 方法的實現。

要實現一個可修改的列表,程序員必須另外重寫 set(int, E) 方法(否則會拋出 UnsupportedOperationException)。如果列表是可變大小的,則程序員必須另外覆蓋 add(int, E) 和 remove(int) 方法。

根據 Collection 接口規(guī)范中的建議,程序員通常應該提供一個 void(無參數)和集合構造函數。

與其他抽象集合實現不同,程序員不必提供迭代器實現;迭代器和列表迭代器由此類在“隨機訪問”方法之上實現:get(int)、set(int, E)、add(int, E) 和 remove(int)。

此類中每個非抽象方法的文檔都詳細描述了它的實現。如果正在實現的集合允許更有效的實現,則可以覆蓋這些方法中的每一個。

此類是 Java 集合框架的成員。

字段摘要

修飾符和類型 字段 描述
protected int modCount 此列表在結構上被修改的次數。

構造函數摘要

修飾符 構造函數 描述
protected AbstractList() 唯一的構造函數。

方法總結

修飾符和類型 方法 描述
void add(int index, E element) 在此列表中的指定位置插入指定元素(可選操作)。
boolean add(E e) 將指定元素附加到此列表的末尾(可選操作)。
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。
IteratorE iterator() 以正確的順序返回此列表中元素的迭代器。
int lastIndexOf(Object o) 返回此列表中指定元素最后一次出現的索引,如果此列表不包含該元素,則返回 -1。
ListIteratorE listIterator() 返回此列表中元素的列表迭代器(以正確的順序)。
ListIteratorE listIterator(int index) 返回此列表中元素的列表迭代器(以正確的順序),從列表中的指定位置開始。
E remove(int index) 移除此列表中指定位置的元素(可選操作)。
protected void removeRange(int fromIndex, int toIndex) 從此列表中刪除索引在 fromIndex(包括)和 toIndex(不包括)之間的所有元素。
E set(int index, E element) 將此列表中指定位置的元素替換為指定元素(可選操作)。
ListE subList(int fromIndex, int toIndex) 返回此列表在指定的 fromIndex(包括)和 toIndex(不包括)之間的部分的視圖。
從類 java.util.AbstractCollection 繼承的方法
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, size, toArray, toArray, toString
從接口 java.util.Collection 繼承的方法
parallelStream, removeIf, stream
從接口 java.lang.Iterable 繼承的方法
forEach
從接口 java.util.List 繼承的方法
addAll, contains, containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, size, sort, spliterator, toArray, toArray
從類 java.lang.Object 繼承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait

字段詳細信息

modCount

protected transient int modCount

此列表在結構上被修改的次數。結構修改是那些改變列表大小的修改,或者以其他方式擾亂它,使得正在進行的迭代可能產生不正確的結果。

該字段由 iterator 和 listIterator 方法返回的迭代器和列表迭代器實現使用。如果此字段的值意外更改,迭代器(或列表迭代器)將拋出 ConcurrentModificationException 以響應下一個、刪除、上一個、設置或添加操作。這提供了快速失敗的行為,而不是面對迭代期間的并發(fā)修改時的不確定行為。

子類對該字段的使用是可選的。如果一個子類希望提供快速失敗的迭代器(和列表迭代器),那么它只需要在其 add(int, E) 和 remove(int) 方法(以及它覆蓋的任何其他導致結構列表的修改)。對 add(int, E) 或 remove(int) 的單個調用必須向該字段添加不超過一個,否則迭代器(和列表迭代器)將拋出虛假的 ConcurrentModificationExceptions。如果實現不希望提供快速失敗的迭代器,則可以忽略此字段。

構造函數詳細信息

AbstractList

protected AbstractList()

唯一的構造函數。 (用于子類構造函數的調用,通常是隱式的。)

方法詳情

add

public boolean add(E e)

將指定元素附加到此列表的末尾(可選操作)。

支持此操作的列表可能會限制可以添加到此列表的元素。 特別是,一些列表會拒絕添加空元素,而另一些列表則會對可能添加的元素類型施加限制。 列表類應在其文檔中明確指定對可以添加哪些元素的任何限制。

此實現調用 add(size(), e)。

請注意,除非 add(int, E) 被覆蓋,否則此實現將引發(fā) UnsupportedOperationException。

指定者:

添加接口CollectionE

指定者:

添加接口ListE

覆蓋:

添加類 AbstractCollectionE

參數:

參數名稱 參數描述
e 要附加到此列表的元素

返回:

true(由 Collection#add 指定)

Throws:

Throw名稱 Throw描述
UnsupportedOperationException 如果此列表不支持添加操作
ClassCastException 如果指定元素的類阻止它被添加到這個列表中
NullPointerException 如果指定元素為空且此列表不允許空元素
IllegalArgumentException 如果此元素的某些屬性阻止它被添加到此列表中

get

public abstract E get(int index)

返回此列表中指定位置的元素。

指定者:

進入接口 ListE

參數:

參數名稱 參數描述
index 要返回的元素的索引

返回:

此列表中指定位置的元素

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果索引超出范圍 (index < 0 || index >= size())

set

public E set(int index, E element)

將此列表中指定位置的元素替換為指定元素(可選操作)。

此實現總是拋出 UnsupportedOperationException。

指定者:

在接口 ListE 中設置

參數:

參數名稱 參數描述
index 要替換的元素的索引
element 要存儲在指定位置的元素

返回:

先前在指定位置的元素

Throws:

Throw名稱 Throw描述
UnsupportedOperationException 如果此列表不支持設置操作
ClassCastException 如果指定元素的類阻止它被添加到這個列表中
NullPointerException 如果指定元素為空且此列表不允許空元素
IllegalArgumentException 如果指定元素的某些屬性阻止它被添加到此列表中
IndexOutOfBoundsException 如果索引超出范圍 (index < 0 || index >= size())

add

public void add(int index, E element)

在此列表中的指定位置插入指定元素(可選操作)。 將當前位于該位置的元素(如果有)和任何后續(xù)元素向右移動(將其索引加一)。

此實現總是拋出 UnsupportedOperationException。

指定者:

添加接口ListE

參數:

參數名稱 參數描述
index 要插入指定元素的索引
element 要插入的元素

Throws:

Throw名稱 Throw描述
UnsupportedOperationException 如果此列表不支持添加操作
ClassCastException 如果指定元素的類阻止它被添加到這個列表中
NullPointerException 如果指定元素為空且此列表不允許空元素
IllegalArgumentException 如果指定元素的某些屬性阻止它被添加到此列表中
IndexOutOfBoundsException 如果索引超出范圍 (index < 0 || index > size())

remove

public E remove(int index)

移除此列表中指定位置的元素(可選操作)。 將任何后續(xù)元素向左移動(從它們的索引中減去 1)。 返回從列表中刪除的元素。

此實現總是拋出 UnsupportedOperationException。

指定者:

在接口 ListE 中刪除

參數:

參數名稱 參數描述
index 要刪除的元素的索引

返回:

先前在指定位置的元素

Throws:

Throw名稱 Throw描述
UnsupportedOperationException 如果此列表不支持刪除操作
IndexOutOfBoundsException 如果索引超出范圍 (index < 0 || index >= size())

indexOf

public int indexOf(Object o)

返回此列表中指定元素第一次出現的索引,如果此列表不包含該元素,則返回 -1。 更正式地說,返回滿足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i,如果沒有這樣的索引,則返回 -1。

這個實現首先得到一個列表迭代器(使用 listIterator())。 然后,它遍歷列表,直到找到指定的元素或到達列表的末尾。

指定者:

接口 ListE 中的 indexOf

參數:

參數名稱 參數描述
o 要搜索的元素

返回:

此列表中指定元素第一次出現的索引,如果此列表不包含該元素,則為 -1

Throws:

Throw名稱 Throw描述
ClassCastException 如果指定元素的類型與此列表不兼容(可選)
NullPointerException 如果指定元素為空且此列表不允許空元素(可選)

lastIndexOf

public int lastIndexOf(Object o)

返回此列表中指定元素最后一次出現的索引,如果此列表不包含該元素,則返回 -1。 更正式地說,返回滿足 (o==null ? get(i)==null : o.equals(get(i))) 的最高索引 i,如果沒有這樣的索引,則返回 -1。

此實現首先獲取一個指向列表末尾的列表迭代器(使用 listIterator(size()))。 然后,它在列表上向后迭代,直到找到指定的元素,或者到達列表的開頭。

指定者:

接口 ListE 中的 lastIndexOf

參數:

參數名稱 參數描述
o 要搜索的元素

返回:

此列表中指定元素最后一次出現的索引,如果此列表不包含該元素,則為 -1

Throws:

Throw名稱 Throw描述
ClassCastException 如果指定元素的類型與此列表不兼容(可選)
NullPointerException 如果指定元素為空且此列表不允許空元素(可選)

clear

public void clear()

從此列表中刪除所有元素(可選操作)。 此調用返回后,列表將為空。

此實現調用 removeRange(0, size())。

請注意,此實現拋出 UnsupportedOperationException 除非 remove(int index) 或 removeRange(int fromIndex, int toIndex) 被覆蓋。

指定者:

在界面 CollectionE 中清除

指定者:

在接口 ListE 中清除

覆蓋:

在類 AbstractCollectionE 中清除

Throws:

Throw名稱 Throw描述
UnsupportedOperationException 如果此列表不支持清除操作

addAll

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

將指定集合中的所有元素插入到此列表中的指定位置(可選操作)。將當前位于該位置的元素(如果有)和任何后續(xù)元素向右移動(增加它們的索引)。新元素將按照指定集合的迭代器返回的順序出現在此列表中。如果在操作正在進行時修改了指定的集合,則此操作的行為是未定義的。 (請注意,如果指定的集合是這個列表,并且它是非空的,則會發(fā)生這種情況。)

此實現在指定集合上獲取一個迭代器并對其進行迭代,使用 add(int, E) 將從迭代器獲得的元素插入到此列表中的適當位置,一次一個。許多實現將覆蓋此方法以提高效率。

請注意,除非 add(int, E) 被覆蓋,否則此實現將引發(fā) UnsupportedOperationException。

指定者:

接口 ListE 中的 addAll

參數:

參數名稱 參數描述
index 插入指定集合中第一個元素的索引
c 包含要添加到此列表的元素的集合

返回:

如果此列表因調用而更改,則為 true

Throws:

Throw名稱 Throw描述
UnsupportedOperationException 如果此列表不支持 addAll 操作
ClassCastException 如果指定集合的元素的類阻止它被添加到此列表中
NullPointerException 如果指定的集合包含一個或多個空元素并且此列表不允許空元素,或者指定的集合為空
IllegalArgumentException 如果指定集合的某個元素的某些屬性阻止它被添加到此列表中
IndexOutOfBoundsException 如果索引超出范圍 (index < 0 || index > size())

iterator

public IteratorE iterator()

以正確的順序返回此列表中元素的迭代器。

此實現返回迭代器接口的簡單實現,依賴于后備列表的 size()、get(int) 和 remove(int) 方法。

請注意,此方法返回的迭代器將拋出 UnsupportedOperationException 以響應其 remove 方法,除非列表的 remove(int) 方法被覆蓋。

可以使此實現在面對并發(fā)修改時拋出運行時異常,如(受保護的)modCount 字段的規(guī)范中所述。

指定者:

接口 CollectionE 中的迭代器

指定者:

接口 IterableE 中的迭代器

指定者:

接口 ListE 中的迭代器

指定者:

AbstractCollectionE 類中的迭代器

返回:

以正確順序遍歷此列表中的元素的迭代器

listIterator

public ListIteratorE listIterator()

返回此列表中元素的列表迭代器(以正確的順序)。

此實現返回 listIterator(0)。

指定者:

接口 ListE 中的 listIterator

返回:

此列表中元素的列表迭代器(按正確順序)

listIterator

public ListIteratorE listIterator(int index)

返回此列表中元素的列表迭代器(以正確的順序),從列表中的指定位置開始。指定的索引指示初始調用 ListIterator#next 將返回的第一個元素。對 ListIterator#previous 的初始調用將返回具有指定索引減一的元素。

此實現返回 ListIterator 接口的直接實現,它擴展了 iterator() 方法返回的 Iterator 接口的實現。 ListIterator 實現依賴于后備列表的 get(int)、set(int, E)、add(int, E) 和 remove(int) 方法。

請注意,此實現返回的列表迭代器將拋出 UnsupportedOperationException 以響應其 remove、set 和 add 方法,除非列表的 remove(int)、set(int, E) 和 add(int, E) 方法被覆蓋。

可以使此實現在面對并發(fā)修改時拋出運行時異常,如(受保護的)modCount 字段的規(guī)范中所述。

指定者:

接口 ListE 中的 listIterator

參數:

參數名稱 參數描述
index 要從列表迭代器返回的第一個元素的索引(通過調用 ListIterator#next)

返回:

此列表中元素的列表迭代器(按正確順序),從列表中的指定位置開始

Throws:

Throw名稱 Throw描述
IndexOutOfBoundsException 如果索引超出范圍 (index < 0 || index > size())

subList

public ListE subList(int fromIndex, int toIndex)

返回此列表在指定的 fromIndex(包括)和 toIndex(不包括)之間的部分的視圖。 (如果 fromIndex 和 toIndex 相等,則返回列表為空。)返回列表由此列表支持,因此返回列表中的非結構性更改會反映在此列表中,反之亦然。 返回的列表支持此列表支持的所有可選列表操作。

這種方法消除了顯式范圍操作的需要(通常存在于數組中的那種)。 通過傳遞 subList 視圖而不是整個列表,任何需要列表的操作都可以用作范圍操作。 例如,以下習慣用法從列表中刪除一系列元素:

      list.subList(from, to).clear(); 

可以為 indexOf 和 lastIndexOf 構造類似的習語,并且 Collections 類中的所有算法都可以應用于子列表。

如果后備列表(即此列表)以除通過返回列表之外的任何方式進行結構修改,則此方法返回的列表的語義將變?yōu)槲炊x。 (結構修改是改變這個列表的大小,或者以其他方式擾亂它,使得正在進行的迭代可能會產生不正確的結果。)

此實現返回一個子類 AbstractList 的列表。子類在私有字段中存儲子列表在后備列表中的偏移量、子列表的大?。梢栽谄渖芷趦雀模┮约昂髠淞斜淼念A期 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) 方法在后備列表上的列表迭代器上返回一個“包裝器對象”,該迭代器是使用后備列表上的相應方法創(chuàng)建的。 iterator 方法只返回 listIterator(),size 方法只返回子類的 size 字段。

所有方法首先檢查后備列表的實際 modCount 是否等于其預期值,如果不等于則拋出 ConcurrentModificationException。

指定者:

接口 ListE 中的子列表

參數:

參數名稱 參數描述
fromIndex subList 的低端點(包括)
toIndex subList 的高端(不包括)

返回:

此列表中指定范圍的視圖

Throws:

Throw名稱 Throw描述
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。

指定者:

接口 CollectionE 中的等于

指定者:

接口 ListE 中的等于

覆蓋:

類 Object 中的等于

參數:

參數名稱 參數描述
o 要與此列表比較是否相等的對象

返回:

如果指定的對象等于此列表,則為 true

hashCode

public int hashCode()

返回此列表的哈希碼值。

此實現完全使用用于在 List#hashCode 方法的文檔中定義列表哈希函數的代碼。

指定者:

接口 CollectionE 中的 hashCode

指定者:

接口 ListE 中的 hashCode

覆蓋:

類 Object 中的 hashCode

返回:

此列表的哈希碼值

removeRange

protected void removeRange(int fromIndex, int toIndex)

從此列表中刪除索引在 fromIndex(包括)和 toIndex(不包括)之間的所有元素。 將任何后續(xù)元素向左移動(減少它們的索引)。 此調用通過 (toIndex - fromIndex) 元素縮短列表。 (如果toIndex==fromIndex,則此操作無效。)

此方法由對該列表及其子列表的清除操作調用。 重寫此方法以利用列表實現的內部結構可以顯著提高此列表及其子列表上的清除操作的性能。

此實現獲取一個位于 fromIndex 之前的列表迭代器,并重復調用 ListIterator.next 后跟 ListIterator.remove,直到整個范圍都被刪除。 注意:如果 ListIterator.remove 需要線性時間,則此實現需要二次時間。

參數:

參數名稱 參數描述
fromIndex 要刪除的第一個元素的索引
toIndex 要刪除的最后一個元素之后的索引
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號