Java容器学習--ListとAbstractList


JDK 1.8.0_151
ListListは、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 extends E> 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(Comparator super 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 extends E> c);
}
Listは、Collectionに続くインターフェースであり、すなわちListはセットの中の一つである。Listは秩序ある容器であり、Listの各要素にはインデックスがある。最初の要素の索引値は0で、以降の要素の索引値は順次+1です。Setとは異なり、Listには重複する要素があることが許される。
Abstract List
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()インターフェースが実現されている。
Abstract SequentialList
public abstract class AbstractSequentialList<E> extends AbstractList<E> {}
AbstractSequentialListは、AbstractListに続く抽象的なクラスである。連続アクセスを実現するためには、プログラマは、このような拡張のみを必要とし、listIterator(int index)およびsize()方法の実装を提供すればよい。
ランダムアクセスを実現するためには、AbstractListの抽象的なクラスを実現し、連続的なアクセスを実現するためには、AbstractSequentialListの抽象的なクラスを実現します。