Java容器学習--ListとAbstractList
JDK 1.8.0_151
List
Abstract List
Abstract SequentialList
ランダムアクセスを実現するためには、
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 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
の抽象的なクラスを実現します。