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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。