Java容器学习--List与AbstractList

JDK 1.8.0_151

List

List是继承于Collection的接口,它自然就包含了Collection中的全部函数接口;由于List是有序的容器,它也额外的有自己的API接口。主要有“添加、删除、获取、修改指定位置的元素”、获取List中的子容器”等。

public interface List<E> extends Collection<E> {
    // Collection中有的
    int size();
    boolean isEmpty();
    boolean contains(Object o);
    Iterator iterator();
    Object[] toArray();
     T[] toArray(T[] a);
    boolean add(E e);
    boolean remove(Object o);
    boolean containsAll(Collection c);
    boolean addAll(Collection c);
    boolean removeAll(Collection c);
    boolean retainAll(Collection c);
    void clear();
    boolean equals(Object o);
    int hashCode();
    // --------------------------------------

    //JDK8 特有
    default void replaceAll(UnaryOperator operator) {
        Objects.requireNonNull(operator);
        final ListIterator li = this.listIterator();
        while (li.hasNext()) {
            li.set(operator.apply(li.next()));
        }
    }
    @SuppressWarnings({"unchecked", "rawtypes"})
    default void sort(Comparatorsuper E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
    }
    @Override
    default Spliterator spliterator() {
        return Spliterators.spliterator(this, Spliterator.ORDERED);
    }
    // --------------------------------------

    // List特有
    E get(int index);
    E set(int index, E element);
    void add(int index, E element);
    E remove(int index);
    int indexOf(Object o);
    int lastIndexOf(Object o);
    ListIterator listIterator();
    ListIterator listIterator(int index);
    List subList(int fromIndex, int toIndex);
    boolean addAll(int index, Collection c);
}

List是一个继承于Collection的接口,即List是集合中的一种。List是有序的容器,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。


AbstractList

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

AbstractList是一个继承于AbstractCollection,并且实现List接口的抽象类。它实现了List中除size()get(int index)之外的所有函数。
AbstractList的主要作用:它实现了List接口中的大部分函数。从而方便其它类继承List。
另外,和AbstractCollection相比,AbstractList抽象类中,实现了iterator()接口。

AbstractSequentialList

public abstract class AbstractSequentialList<E> extends AbstractList<E> {}

AbstractSequentialList是一个继承于AbstractList的抽象类。要实现连续访问,程序员只需要扩展此类,并提供 listIterator(int index)size() 方法的实现即可。


想要实现随机访问(如:数组)就去实现AbstractList 抽象类,想要实现连续访问(如:链表)就去实现AbstractSequentialList 抽象类。

你可能感兴趣的:(JAVA,Java学习笔记)