Класс AbstractList<E>

Все реализованные интерфейсы:
Iterable<E>, Collection<E>, List<E>
Прямые известные подклассы:
AbstractSequentialList, ArrayList, Vector
public abstract class AbstractList<E>
extends AbstractCollection<E>
implements List<E>

Этот класс предоставляет скелетную реализацию интерфейса List для минимизации усилий, необходимых для реализации этого интерфейса, основанного на хранилище с «случайным доступом» (например, массив). Для данных с последовательным доступом (например, связанный список), следует использовать AbstractSequentialList вместо этого класса.

Для реализации неизменяемого списка программисту необходимо только расширить этот класс и предоставить реализации методов get(int) и size().

Для реализации изменяемого списка программисту дополнительно необходимо переопределить метод set(int, E) (который в противном случае выбрасывает исключение UnsupportedOperationException). Если размер списка переменный, программисту дополнительно необходимо переопределить методы add(int, E) и remove(int).

Программист обычно должен предоставить конструктор без аргументов (пустой) и коллекционный конструктор, в соответствии с рекомендациями в спецификации интерфейса Collection.

В отличие от других реализаций абстрактных коллекций, программисту не нужно реализовывать итератор; итератор и итератор списка реализуются этим классом на основе методов «случайного доступа»: get(int), set(int, E), add(int, E) и remove(int).

Документация для каждого неабстрактного метода в этом классе подробно описывает его реализацию. Каждый из этих методов может быть переопределён, если реализуемая коллекция допускает более эффективную реализацию.

Этот класс является частью Java Collections Framework.

С момента:
1.2

Поля

Модификатор и тип Поле Описание
protected int modCount

Количество раз, когда этот список был структурно изменён.

Конструкторы

Модификатор Конструктор Описание
protected AbstractList()

Единственный конструктор.

Методы

Модификатор и тип Метод Описание
void add​(int index, E element)

Вставляет указанный элемент в указанную позицию в этом списке (необязательная операция).

boolean add​(E e)

Добавляет указанный элемент в конец этого списка (необязательная операция).

boolean addAll​(int index, Collection<? extends E> c)

Вставляет все элементы в указанной коллекции в этот список в указанную позицию (необязательная операция).

void clear()

Удаляет все элементы из этого списка (необязательная операция).

boolean equals​(Object o)

Сравнивает указанный объект с этим списком на равенство.

abstract E get​(int index)

Возвращает элемент в указанной позиции в этом списке.

int hashCode()

Возвращает значение хэш-кода для этого списка.

int indexOf​(Object o)

Возвращает индекс первого вхождения указанного элемента в этом списке или -1, если этот список не содержит элемент.

Iterator<E> iterator()

Возвращает итератор по элементам в этом списке в правильной последовательности.

int lastIndexOf​(Object o)

Возвращает индекс последнего вхождения указанного элемента в этом списке или -1, если этот список не содержит элемент.

ListIterator<E> listIterator()

Возвращает итератор списка по элементам в этом списке (в правильной последовательности).

ListIterator<E> listIterator​(int index)

Возвращает итератор списка по элементам в этом списке (в правильной последовательности), начиная с указанной позиции в списке.

E remove​(int index)

Удаляет элемент в указанной позиции в этом списке (необязательная операция).

protected void removeRange​(int fromIndex, int toIndex)

Удаляет из этого списка все элементы, индекс которых находится между fromIndex, включительно, и toIndex, не включительно.

E set​(int index, E element)

Заменяет элемент в указанной позиции в этом списке указанным элементом (необязательная операция).

List<E> subList​(int fromIndex, int toIndex)

Возвращает представление части этого списка между указанной fromIndex, включительно, и toIndex, не включительно.

Методы, объявленные в классе java.util.AbstractCollection

addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray, toString

Методы, объявленные в классе java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе java.util.Collection

parallelStream, removeIf, stream, toArray

Методы, объявленные в интерфейсе java.lang.Iterable

forEach

Методы, объявленные в интерфейсе java.util.List

addAll, contains, containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, size, sort, spliterator, toArray, toArray

Поля

modCount

protected transient int modCount

Количество раз, когда этот список был структурно изменён. Структурные изменения — это те, которые изменяют размер списка или иначе нарушают его, так что итерации в процессе могут давать неверные результаты.

Это поле используется реализациями итератора и итератора списка, возвращаемыми методами iterator и listIterator. Если значение этого поля изменится неожиданно, итератор (или итератор списка) выбросит исключение ConcurrentModificationException в ответ на операции next, remove, previous, set или add. Это обеспечивает поведение «быстрое отказ», а не недетерминированное поведение при одновременном изменении во время итерации.

Использование этого поля подклассами является необязательным. Если подкласс хочет предоставить итераторы с быстрым отказом (и итераторы списка), то ему нужно просто инкрементировать это поле в своих методах add(int, E) и remove(int) (и любых других переопределённых им методах, приводящих к структурным изменениям в списке). Одно обращение к add(int, E) или remove(int) должно добавить не более одного к этому полю, иначе итераторы (и итераторы списка) выбросят ложные исключения ConcurrentModificationExceptions. Если реализация не хочет предоставлять итераторы с быстрым отказом, это поле можно игнорировать.

Конструкторы

AbstractList

protected AbstractList()

Единственный конструктор. (Для вызова конструкторами подклассов, обычно неявным).

Методы

add

public boolean add(E e)

Добавляет указанный элемент в конец этого списка (необязательная операция).

В списки, поддерживающие эту операцию, могут быть внесены ограничения на добавляемые элементы. В частности, некоторые списки не будут добавлять null-элементы, а другие наложат ограничения на типы добавляемых элементов. Классы списков должны чётко указывать в своей документации любые ограничения на добавляемые элементы.

Определено в:
add в интерфейсе Collection<E>
Определено в:
add в интерфейсе List<E>
Переопределяет:
add в классе AbstractCollection<E>
Требования к реализации:
Эта реализация вызывает add(size(), e).

Обратите внимание, что эта реализация выбрасывает UnsupportedOperationException, если add(int, E) не переопределён.

Параметры:
e - элемент, который должен быть добавлен в конец этого списка
Возвращает:
true (как указано в Collection.add(E))
Исключение:
UnsupportedOperationException - если операция add не поддерживается этим списком
ClassCastException - если класс указанного элемента препятствует его добавлению в этот список
NullPointerException - если указанный элемент имеет значение null, а этот список не допускает null-элементы
IllegalArgumentException - если какое-либо свойство этого элемента препятствует его добавлению в этот список

get

public abstract E get(int index)

Возвращает элемент в указанной позиции в этом списке.

Определено в:
get в интерфейсе List<E>
Параметры:
index - индекс возвращаемого элемента
Возвращает:
элемент в указанной позиции в этом списке
Исключение:
IndexOutOfBoundsException - если индекс находится вне диапазона (index < 0 || index >= size())

set

public E set(int index,
             E element)

Заменяет элемент в указанной позиции в этом списке указанным элементом (необязательная операция).

Определено в:
set в интерфейсе List<E>
Требования к реализации:
Эта реализация всегда выбрасывает UnsupportedOperationException.
Параметры:
index - индекс заменяемого элемента
element - элемент, который будет сохранён в указанной позиции
Возвращает:
элемент, который ранее находился в указанной позиции
Исключение:
UnsupportedOperationException - если операция set не поддерживается этим списком
ClassCastException - если класс указанного элемента препятствует его добавлению в этот список
NullPointerException - если указанный элемент имеет значение null, а этот список не допускает null-элементы
IllegalArgumentException - если какое-либо свойство указанного элемента препятствует его добавлению в этот список
IndexOutOfBoundsException - если индекс находится вне диапазона (index < 0 || index >= size())

add

public void add(int index,
                E element)

Вставляет указанный элемент в указанную позицию в этом списке (необязательная операция). Смещает элемент, который в данный момент находится в этой позиции (если таковой имеется), и все последующие элементы вправо (увеличивает их индексы на 1).

Определено в:
add в интерфейсе List<E>
Требования к реализации:
Эта реализация всегда выбрасывает UnsupportedOperationException.
Параметры:
index - индекс, в который нужно вставить указанный элемент
element - вставляемый элемент
Исключение:
UnsupportedOperationException - если операция add не поддерживается этим списком
ClassCastException - если класс указанного элемента препятствует его добавлению в этот список
NullPointerException - если указанный элемент имеет значение null, а этот список не допускает null-элементы
IllegalArgumentException - если какое-либо свойство указанного элемента препятствует его добавлению в этот список
IndexOutOfBoundsException - если индекс находится вне диапазона (index < 0 || index > size())

remove

public E remove(int index)

Удаляет элемент в указанной позиции в этом списке (необязательная операция). Смещает все последующие элементы влево (уменьшает их индексы на 1). Возвращает удалённый элемент.

Определено в:
remove в интерфейсе List<E>
Требования к реализации:
Эта реализация всегда выбрасывает UnsupportedOperationException.
Параметры:
index - индекс удаляемого элемента
Возвращает:
элемент, который ранее находился в указанной позиции
Исключение:
UnsupportedOperationException - если операция remove не поддерживается этим списком
IndexOutOfBoundsException - если индекс находится вне диапазона (index < 0 || index >= size())

indexOf

public int indexOf(Object o)

Возвращает индекс первого вхождения указанного элемента в этот список или -1, если этот список не содержит элемент. Более формально, возвращает наименьший индекс i, такой, что Objects.equals(o, get(i)), или -1, если такого индекса нет.

Определено в:
indexOf в интерфейсе List<E>
Требования к реализации:
Эта реализация сначала получает итератор списка (с listIterator()). Затем она перебирает список, пока не найдёт указанный элемент или не достигнет конца списка.
Параметры:
o - искомый элемент
Возвращает:
индекс первого вхождения указанного элемента в этот список, или -1, если этот список не содержит элемент
Исключение:
ClassCastException - если тип указанного элемента несовместим с этим списком (необязательно)
NullPointerException - если указанный элемент имеет значение null, а этот список не допускает null-элементы (необязательно)

lastIndexOf

public int lastIndexOf(Object o)

Возвращает индекс последнего вхождения указанного элемента в этот список, или -1, если этот список не содержит элемент. Более формально, возвращает наибольший индекс i, такой, что Objects.equals(o, get(i)), или -1, если такого индекса нет.

Определено в:
lastIndexOf в интерфейсе List<E>
Требования к реализации:
Эта реализация сначала получает итератор списка, указывающий на конец списка (с listIterator(size())). Затем она перебирает список в обратном порядке, пока не найдёт указанный элемент или не достигнет начала списка.
Параметры:
o - искомый элемент
Возвращает:
индекс последнего вхождения указанного элемента в этот список, или -1, если этот список не содержит элемент
Исключение:
ClassCastException - если тип указанного элемента несовместим с этим списком (необязательно)
NullPointerException - если указанный элемент имеет значение null, а этот список не допускает null-элементы (необязательно)

clear

public void clear()

Удаляет все элементы из этого списка (необязательная операция). Список будет пустым после возврата этого вызова.

Определено в:
clear в интерфейсе Collection<E>
Определено в:
clear в интерфейсе List<E>
Переопределяет:
clear в классе AbstractCollection<E>
Требования к реализации:
Эта реализация вызывает removeRange(0, size()).

Обратите внимание, что эта реализация выбрасывает UnsupportedOperationException, если remove(int index) или removeRange(int fromIndex, int toIndex) не переопределены.

Исключение:
UnsupportedOperationException - если операция clear не поддерживается этим списком

addAll

public boolean addAll(int index,
                      Collection<? extends E> c)

Вставляет все элементы из указанного набора в этот список в указанной позиции (необязательная операция). Смещает элемент, который в данный момент находится в этой позиции (если таковой имеется), и все последующие элементы вправо (увеличивает их индексы). Новые элементы будут появляться в этом списке в том порядке, в котором они возвращаются итератором указанного набора. Поведение этой операции не определено, если указанный набор изменяется во время выполнения операции. (Обратите внимание, что это произойдёт, если указанный набор является этим списком, и он не пустой.)

Определено в:
addAll в интерфейсе List<E>
Требования к реализации:
Эта реализация получает итератор над указанным набором и перебирает его, вставляя полученные от итератора элементы в этот список в соответствующей позиции, по одному за раз, используя add(int, E). Многие реализации переопределят этот метод для повышения эффективности.

Обратите внимание, что эта реализация выбрасывает UnsupportedOperationException, если add(int, E) не переопределён.

Параметры:
index - индекс, в который нужно вставить первый элемент из указанного набора
c - набор, содержащий элементы, которые нужно добавить в этот список
Возвращает:
true если этот список изменился в результате вызова
Исключение:
UnsupportedOperationException - если операция addAll не поддерживается этим списком
ClassCastException - если класс элемента указанного набора препятствует его добавлению в этот список
NullPointerException - если указанный набор содержит один или несколько null-элементов, а этот список не допускает null-элементы, или если указанный набор имеет значение null
IllegalArgumentException - если какое-либо свойство элемента указанного набора препятствует его добавлению в этот список
IndexOutOfBoundsException - если индекс находится вне диапазона (index < 0 || index > size())

iterator

public Iterator<E> iterator()

Возвращает итератор по элементам в этом списке в правильной последовательности.

Определено:
iterator в интерфейсе Collection<E>
Определено:
iterator в интерфейсе Iterable<E>
Определено:
iterator в интерфейсе List<E>
Определено:
iterator в классе AbstractCollection<E>
Требования к реализации:
Эта реализация возвращает простую реализацию интерфейса итератора, опираясь на методы списковой подложки size(), get(int), и remove(int).

Обратите внимание, что итератор, возвращаемый этим методом, будет выбрасывать исключение UnsupportedOperationException в ответ на его метод remove, если метод remove(int) списка не переопределен.

Эта реализация может выбрасывать исключения времени выполнения при одновременном изменении, как описано в спецификации для поля (защищенного) modCount.

Возвращает:
итератор по элементам в этом списке в правильном порядке

listIterator

public ListIterator<E> listIterator()

Возвращает итератор списка по элементам в этом списке (в правильном порядке).

Определено:
listIterator в интерфейсе List<E>
Требования к реализации:
Эта реализация возвращает listIterator(0).
Возвращает:
итератор списка по элементам в этом списке (в правильном порядке)
См. также:
listIterator(int)

listIterator

public ListIterator<E> listIterator(int index)

Возвращает итератор списка по элементам в этом списке (в правильном порядке), начиная с указанной позиции в списке. Указанный индекс указывает первый элемент, который будет возвращен начальным вызовом next. Начальный вызов previous вернёт элемент с индексом, уменьшенным на единицу.

Определено:
listIterator в интерфейсе List<E>
Требования к реализации:
Эта реализация возвращает простую реализацию интерфейса ListIterator, расширяющую реализацию интерфейса Iterator, возвращаемого методом iterator(). Реализация ListIterator опирается на методы списковой подложки get(int), set(int, E), add(int, E) и remove(int).

Обратите внимание, что итератор списка, возвращаемый этой реализацией, будет выбрасывать исключение UnsupportedOperationException в ответ на его методы remove, set и add, если методы remove(int), set(int, E), и add(int, E) списка не переопределены.

Эта реализация может выбрасывать исключения времени выполнения при одновременном изменении, как описано в спецификации для поля (защищенного) modCount.

Параметры:
index - индекс первого элемента, который будет возвращен итератором списка (вызовом next)
Возвращает:
итератор списка по элементам в этом списке (в правильном порядке), начиная с указанной позиции в списке
Исключение:
IndexOutOfBoundsException - если индекс находится вне диапазона (index < 0 || index > size())

subList

public List<E> subList(int fromIndex,
                       int toIndex)

Возвращает представление части этого списка между указанным fromIndex, включительно, и toIndex, исключая. (Если fromIndex и toIndex равны, возвращаемый список пуст.) Возвращаемый список поддерживается этим списком, поэтому изменения в возвращаемом списке отражаются в этом списке, и наоборот. Возвращаемый список поддерживает все необязательные операции списка, поддерживаемые этим списком.

Этот метод устраняет необходимость в явных операциях диапазона (подобных тем, которые обычно существуют для массивов). Любая операция, ожидающая список, может быть использована как операция диапазона путём передачи представления подсписка вместо всего списка. Например, следующая конструкция удаляет диапазон элементов из списка:

list.subList(from, to).clear();
Аналогичные конструкции могут быть построены для indexOf и lastIndexOf, и все алгоритмы в классе Collections могут применяться к подсписку.

Семантика списка, возвращаемого этим методом, становится неопределенной, если базовый список (то есть этот список) каким-либо образом изменяется структурно, за исключением случаев изменения через возвращаемый список. (Структурные изменения — это изменения размера этого списка или другие изменения, которые могут привести к тому, что итерации в процессе могут привести к неверным результатам.)

Определено:
subList в интерфейсе List<E>
Требования к реализации:
Эта реализация возвращает список, который наследует от AbstractList. Подкласс хранит в закрытых полях размер подсписка (который может изменяться на протяжении его жизненного цикла) и ожидаемое значение modCount базового списка. Существует две разновидности подкласса, одна из которых реализует RandomAccess. Если этот список реализует RandomAccess, возвращаемый список будет экземпляром подкласса, реализующего RandomAccess.

Методы set(int, E), get(int), add(int, E), remove(int), addAll(int, Collection) и removeRange(int, int) подкласса делегируют соответствующим методам базового абстрактного списка после проверки границ индекса и коррекции смещения. Метод addAll(Collection c) просто возвращает addAll(size, c).

Метод listIterator(int) возвращает "обёртку" над итератором списка базового списка, созданного соответствующим методом базового списка. Метод iterator просто возвращает listIterator(), а метод size просто возвращает поле size подкласса.

Все методы сначала проверяют, совпадает ли фактическое значение modCount базового списка с его ожидаемым значением, и выбрасывают исключение ConcurrentModificationException, если это не так.

Параметры:
fromIndex - нижняя граница (включительно) подсписка
toIndex - верхняя граница (исключая) подсписка
Возвращает:
представление указанного диапазона в этом списке
Исключение:
IndexOutOfBoundsException - если индекс конечной точки находится вне диапазона (fromIndex < 0 || toIndex > size)
IllegalArgumentException - если индексы конечных точек заданы не в порядке (fromIndex > toIndex)

equals

public boolean equals(Object o)

Сравнивает указанный объект с этим списком на равенство. Возвращает true тогда и только тогда, когда указанный объект также является списком, оба списка имеют одинаковый размер и все соответствующие пары элементов в двух списках равны. (Два элемента e1 и e2 считаются равными, если (e1==null ? e2==null : e1.equals(e2)).) Другими словами, два списка определяются как равные, если они содержат одинаковые элементы в одинаковом порядке.

Определено:
equals в интерфейсе Collection<E>
Определено:
equals в интерфейсе List<E>
Переопределяет:
equals в классе Object
Требования к реализации:
Эта реализация сначала проверяет, является ли указанный объект этим списком. Если да, возвращает true; в противном случае проверяет, является ли указанный объект списком. Если нет, возвращает false; если да, итерируется по обоим спискам, сравнивая соответствующие пары элементов. Если какое-либо сравнение возвращает false, этот метод возвращает false. Если один из итераторов заканчивается раньше другого, возвращает false (так как списки имеют разную длину); в противном случае возвращает true при завершении итераций.
Параметры:
o - объект, который будет сравниваться на равенство с этим списком
Возвращает:
true если указанный объект равен этому списку
См. также:
Object.hashCode(), HashMap

hashCode

public int hashCode()

Возвращает хэш-код для этого списка.

Определено:
hashCode в интерфейсе Collection<E>
Определено:
hashCode в интерфейсе List<E>
Переопределяет:
hashCode в классе Object
Требования к реализации:
Эта реализация использует точно тот же код, что используется для определения функции хеширования списка в документации для метода List.hashCode().
Возвращает:
хэш-код для этого списка
См. также:
Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)

removeRange

protected void removeRange(int fromIndex,
                           int toIndex)

Удаляет из этого списка все элементы, индекс которых находится между fromIndex, включительно, и toIndex, исключая. Перемещает все последующие элементы влево (уменьшает их индекс). Этот вызов уменьшает длину списка на (toIndex - fromIndex) элементов. (Если toIndex==fromIndex, эта операция не оказывает никакого действия.)

Этот метод вызывается операцией clear над этим списком и его подсписками. Переопределение этого метода с использованием внутренних элементов реализации списка может существенно улучшить производительность операции clear над этим списком и его подсписками.

Требования к реализации:
Эта реализация получает итератор списка, расположенный перед fromIndex, и многократно вызывает ListIterator.next и ListIterator.remove, пока весь диапазон не будет удален. Примечание: если ListIterator.remove требует линейного времени, эта реализация требует квадратичного времени.
Параметры:
fromIndex - индекс первого удаляемого элемента
toIndex - индекс после последнего удаляемого элемента

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/AbstractList.html

Spec-Zone .ru
спецификации, руководства, описания, API