AbstractListJava 中的類是Java集合框架並實施采集接口和AbstractCollection類。此類提供了以下框架的實現List Interface接口,以最大限度地減少實現該接口所需的工作量隨機訪問數據存儲(例如數組)。對於順序訪問數據(例如鏈表),AbstractSequentialList應優先使用此類。
要實現一個不可修改的列表,隻需擴展AbstractList類並實現get(int)和 size()方法。要實現可修改的列表,為此還需要重寫 set(int index, E element) 方法(否則會引發 UnsupportedOperationException)。如果列表是 variable-size,則應覆蓋 add(int, E ) 和 remove(int) 方法。
類層次結構:
聲明:
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> where E is the type of elements maintained by this collection.
構造函數:protected AbstractList() - 默認構造函數,但受保護,不允許創建 AbstractList 對象。
AbstractList<E> al = new ArrayList<E>();
示例 1:AbstractList 是一個Abstract,因此應該為其分配一個子類的實例,例如ArrayList,LinkedList, 或者Vector。
Java
// Java code to illustrate AbstractList
import java.util.*;
public class AbstractListDemo {
public static void main(String args[])
{
// Creating an empty AbstractList
AbstractList<String> list = new ArrayList<String>();
// Use add() method to add elements in the list
list.add("Geeks");
list.add("for");
list.add("Geeks");
list.add("10");
list.add("20");
// Displaying the AbstractList
System.out.println("AbstractList:" + list);
}
}
AbstractList:[Geeks, for, Geeks, 10, 20]
示例 2:
Java
// Java code to illustrate
// methods of AbstractCollection
import java.util.*;
public class AbstractListDemo {
public static void main(String args[])
{
// Creating an empty AbstractList
AbstractList<String>
list = new LinkedList<String>();
// Using add() method to add elements in the list
list.add("Geeks");
list.add("for");
list.add("Geeks");
list.add("10");
list.add("20");
// Output the list
System.out.println("AbstractList: " + list);
// Remove the head using remove()
list.remove(3);
// Print the final list
System.out.println("Final AbstractList: " + list);
// getting the index of last occurrence
// using lastIndexOf() method
int lastindex = list.lastIndexOf("A");
// printing the Index
System.out.println("Last index of A : "
+ lastindex);
}
}
AbstractList: [Geeks, for, Geeks, 10, 20] Final AbstractList: [Geeks, for, Geeks, 20] Last index of A : -1
Methods in AbstractList
METHOD |
DESCRIPTION |
---|---|
add(int index, E element) | 在此列表中的指定位置插入指定元素(可選操作)。 |
AbstractList add(E ele) | 將指定元素追加到此列表的末尾(可選操作)。 |
將指定集合中的所有元素插入到此列表的指定位置(可選操作)。 | |
AbstractList clear() | 從此列表中刪除所有元素(可選操作)。 |
AbstractList equals() | 比較指定對象與此列表是否相等。 |
AbstractList get() | 返回此列表中指定位置的元素。 |
AbstractList hashCode() | 返回此列表的哈希碼值。 |
AbstractList indexOf() | 返回此列表中指定元素第一次出現的索引,如果此列表不包含該元素,則返回 -1。 |
AbstractList iterator() | 按正確順序返回此列表中元素的迭代器。 |
AbstractList lastIndexOf() | 返回此列表中最後一次出現的指定元素的索引,如果此列表不包含該元素,則返回 -1。 |
AbstractList listIterator() | 返回此列表中元素的列表迭代器(按正確的順序)。 |
AbstractList listIterator() | 返回列表中元素的列表迭代器(按正確的順序),從列表中的指定位置開始。 |
AbstractList remove() | 刪除此列表中指定位置的元素(可選操作)。 |
刪除範圍(int fromIndex,int toIndex) | 從此列表中刪除索引介於 fromIndex(包含)和 toIndex(不包含)之間的所有元素。 |
AbstractList set() | 將此列表中指定位置的元素替換為指定元素(可選操作)。 |
AbstractList subList() | 返回此列表中指定的 fromIndex(包含)和 toIndex(不包含)之間的部分的視圖。 |
Methods declared in class java.util.AbstractCollection
METHOD |
DESCRIPTION |
---|---|
AbstractCollection addAll() | 將指定集合中的所有元素添加到此集合中(可選操作)。 |
AbstractCollection contains() | 如果此集合包含指定元素,則返回 true。 |
AbstractCollection containsAll() | 如果此集合包含指定集合中的所有元素,則返回 true。 |
AbstractCollection isEmpty() | 如果此集合不包含任何元素,則返回 true。 |
AbstractCollection remove() | 從此集合中刪除指定元素的單個實例(如果存在)(可選操作)。 |
AbstractCollection removeAll() | 刪除指定集合中也包含的所有該集合的元素(可選操作)。 |
AbstractCollection retainAll() | 僅保留此集合中包含在指定集合中的元素(可選操作)。 |
AbstractCollection toArray() | 返回一個包含此集合中所有元素的數組。 |
AbstractCollection toArray() | 返回一個包含該集合中所有元素的數組;返回數組的運行時類型是指定數組的運行時類型。 |
AbstractCollection toString() | 返回此集合的字符串表示形式。 |
Methods declared in interface java.util.Collection
METHOD |
DESCRIPTION |
---|---|
parallelStream() | 返回一個可能並行的 Stream 並以此集合作為其源。 |
removeIf(Predicate<? super E> 過濾器) | 刪除此集合中滿足給定謂詞的所有元素。 |
stream() | 返回以此集合作為源的順序 Stream。 |
toArray(IntFunction<T[]> 生成器) |
返回一個包含此集合中所有元素的數組,使用 提供了生成器函數來分配返回的數組。 |
接口 java.util.List 中聲明的方法
METHOD |
DESCRIPTION |
---|---|
List addAll() |
將指定集合中的所有元素按以下順序附加到此列表的末尾 它們由指定集合的迭代器返回(可選操作)。 |
List contains() | 如果此列表包含指定元素,則返回 true。 |
List containsAll() | 如果此列表包含指定集合的所有元素,則返回 true。 |
List isEmpty() | 如果此列表不包含任何元素,則返回 true。 |
remove(int index) | 刪除此列表中指定位置的元素(可選操作)。 |
移除全部(集合<?> c) | 從此列表中刪除指定集合中包含的所有元素(可選操作)。 |
ReplaceAll(UnaryOperator<E> 運算符) | 將此列表中的每個元素替換為將運算符應用於該元素的結果。 |
List retainAll() | 僅保留此列表中指定集合中包含的元素(可選操作)。 |
List size() | 返回此列表中的元素數量。 |
排序(比較器<? super E> c) | 根據指定比較器產生的順序對此列表進行排序。 |
spliterator() | 在此列表中的元素上創建一個 Spliterator。 |
toArray() | 返回一個數組,其中按正確順序(從第一個元素到最後一個元素)包含此列表中的所有元素。 |
toArray(T[] a) |
返回一個數組,其中按正確順序(從第一個元素到最後一個元素)包含此列表中的所有元素 ;返回數組的運行時類型是指定數組的運行時類型。 |
Java 中的 AbstractList 類是一個抽象類,提供 List 接口的骨架實現。它是 Java Collections Framework 的一部分,旨在通過 ArrayList 和 LinkedList 等具體列表實現進行子類化。
以下是如何在 Java 中使用 AbstractList 類的示例:
Java
import java.util.AbstractList;
import java.util.List;
public class MyList extends AbstractList<Integer> {
private int size;
public MyList(int size) {
this.size = size;
}
@Override
public Integer get(int index) {
return index;
}
@Override
public int size() {
return size;
}
public static void main(String[] args) {
List<Integer> list = new MyList(5);
for (int i : list) {
System.out.println(i);
}
}
}
0 1 2 3 4
通過擴展AbstractList類,隻需要實現get和size方法,就提供了列表的基本實現。與從頭開始實現 List 接口相比,這可以節省大量時間和代碼。
在Java中使用AbstractList的優點:
- 減少代碼重複:通過使用 AbstractList 類作為基礎,您可以減少實現列表所需編寫的代碼量,因為許多常見方法已經為您實現了。
- 一致的行為:由於 AbstractList 類實現了 List 接口中的許多方法,因此您可以確保您的實現將與其他列表實現(例如 ArrayList 和 LinkedList)具有一致的行為。
在Java中使用AbstractList的缺點:
- 函數有限:由於 AbstractList 類是一個抽象類,因此它僅提供列表的基本實現。您可能需要實現其他方法來提供應用程序所需的完整函數。
- 增加複雜性:通過擴展 AbstractList 類,您將增加代碼的複雜性,因為您依賴基類來提供某些行為。
參考書:
Naftalin 和 Wadler 編寫的 “Java Collections” 是一本了解 Java 集合框架和 AbstractList 的很好的參考書。本書全麵介紹了 Java 集合框架(包括 AbstractList),並包含許多示例和練習來幫助您了解如何有效地使用這些類。
參考:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/AbstractList.html
相關用法
- Java AbstractList addAll()用法及代碼示例
- Java AbstractList clear()用法及代碼示例
- Java AbstractList equals()用法及代碼示例
- Java AbstractList get()用法及代碼示例
- Java AbstractList hashCode()用法及代碼示例
- Java AbstractList indexOf()用法及代碼示例
- Java AbstractList iterator()用法及代碼示例
- Java AbstractList lastIndexOf()用法及代碼示例
- Java AbstractList listIterator()用法及代碼示例
- Java AbstractList remove()用法及代碼示例
- Java AbstractList set()用法及代碼示例
- Java AbstractList subList()用法及代碼示例
- Java AbstractList add(E ele)用法及代碼示例
- Java AbstractList add(int index, E element)用法及代碼示例
- Java AbstractCollection add()用法及代碼示例
- Java AbstractCollection addAll()用法及代碼示例
- Java AbstractCollection clear()用法及代碼示例
- Java AbstractCollection contains()用法及代碼示例
- Java AbstractCollection containsAll()用法及代碼示例
- Java AbstractCollection isEmpty()用法及代碼示例
- Java AbstractCollection remove()用法及代碼示例
- Java AbstractCollection removeAll()用法及代碼示例
- Java AbstractCollection retainAll()用法及代碼示例
- Java AbstractCollection size()用法及代碼示例
- Java AbstractCollection toArray()用法及代碼示例
注:本文由純淨天空篩選整理自RishabhPrabhu大神的英文原創作品 AbstractList in Java with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。