当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java AbstractList用法及代码示例


AbstractListJava 中的类是Java集合框架并实施采集接口AbstractCollection。此类提供了以下框架的实现List Interface接口,以最大限度地减少实现该接口所需的工作量随机访问数据存储(例如数组)。对于顺序访问数据(例如链表),AbstractSequentialList应优先使用此类。

要实现一个不可修改的列表,只需扩展AbstractList类并实现get(int) size()方法。要实现可修改的列表,为此还需要重写 set(int index, E element) 方法(否则会引发 UnsupportedOperationException)。如果列表是 variable-size,则应覆盖 add(int, E ) 和 remove(int) 方法。

类层次结构:

AbstractList-in-Java

声明:

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

AbstractList addAll()

将指定集合中的所有元素插入到此列表的指定位置(可选操作)。
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的优点:

  1. 减少代码重复:通过使用 AbstractList 类作为基础,您可以减少实现列表所需编写的代码量,因为许多常见方法已经为您实现了。
  2. 一致的行为:由于 AbstractList 类实现了 List 接口中的许多方法,因此您可以确保您的实现将与其他列表实现(例如 ArrayList 和 LinkedList)具有一致的行为。

在Java中使用AbstractList的缺点:

  1. 函数有限:由于 AbstractList 类是一个抽象类,因此它仅提供列表的基本实现。您可能需要实现其他方法来提供应用程序所需的完整函数。
  2. 增加复杂性:通过扩展 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



相关用法


注:本文由纯净天空筛选整理自RishabhPrabhu大神的英文原创作品 AbstractList in Java with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。