Spec-Zone.ru › OpenJDK 17

Класс AbstractList<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.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
Количество раз, когда этот список был структурно изменён.

Краткое описание конструкторов

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

Краткое описание методов

Модификатор и тип Метод Описание
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. Это обеспечивает поведение fail-fast, а не недетерминированное поведение при одновременном изменении во время итерации.

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

Подробное описание конструкторов

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

remove

public E remove(int index)
Удаляет элемент в указанной позиции в этом списке (необязательная операция). Смещает все последующие элементы влево (уменьшает их индексы). Возвращает элемент, который был удалён из списка.
Определено в:
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)
Вставляет все элементы из указанного списка в это список по указанной позиции (необязательная операция). Смещает элемент, который в данный момент находится на этой позиции (если таковой имеется), и все последующие элементы вправо (увеличивает их индексы). Новые элементы будут появляться в этом списке в порядке, в котором они возвращаются итератором указанного списка. Поведение этой операции не определено, если указанный список изменяется во время выполнения операции. (Обратите внимание, что это произойдет, если указанный список — это этот список, и он не пустой.)
Specified by:
addAll в интерфейсе List<E>
Implementation Requirements:
Эта реализация получает итератор над указанным списком и итерирует по нему, вставляя элементы, полученные от итератора, в этот список в соответствующей позиции по одному за раз, используя add(int, E). Многие реализации переопределят этот метод для повышения эффективности.

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

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

iterator

public Iterator<E> iterator()
Возвращает итератор по элементам в этом списке в правильной последовательности.
Specified by:
iterator в интерфейсе Collection<E>
Specified by:
iterator в интерфейсе Iterable<E>
Specified by:
iterator в интерфейсе List<E>
Specified by:
iterator в классе AbstractCollection<E>
Implementation Requirements:
Эта реализация возвращает простую реализацию интерфейса итератора, опираясь на методы size(), get(int), и remove(int) базового списка.

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

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

Returns:
итератор по элементам в этом списке в правильной последовательности

listIterator

public ListIterator<E> listIterator()
Возвращает итератор списка по элементам в этом списке (в правильной последовательности).
Specified by:
listIterator в интерфейсе List<E>
Implementation Requirements:
Эта реализация возвращает listIterator(0).
Returns:
итератор списка по элементам в этом списке (в правильной последовательности)
See Also:
  • listIterator(int)

listIterator

public ListIterator<E> listIterator(int index)
Возвращает итератор списка по элементам в этом списке (в правильной последовательности), начиная с указанной позиции в списке. Указанный индекс указывает на первый элемент, который будет возвращен начальным вызовом next. Начальный вызов previous вернул бы элемент с указанным индексом минус один.
Specified by:
listIterator в интерфейсе List<E>
Implementation Requirements:
Эта реализация возвращает простую реализацию интерфейса 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.

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

subList

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

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


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

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

Specified by:
subList в интерфейсе List<E>
Implementation Requirements:
Эта реализация возвращает список, который является подклассом AbstractList. Подкласс хранит в частных полях размер subList (который может меняться на протяжении его жизненного цикла) и ожидаемое значение 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, если это не так.

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

equals

public boolean equals(Object o)
Сравнивает указанный объект с этим списком на предмет равенства. Возвращает true, если и только если указанный объект также является списком, оба списка имеют одинаковый размер, и все соответствующие пары элементов в двух списках равны. (Два элемента e1 и e2 равны, если (e1==null ? e2==null : e1.equals(e2)).) Другими словами, два списка определяются как равные, если они содержат одни и те же элементы в том же порядке.
Specified by:
equals в интерфейсе Collection<E>
Specified by:
equals в интерфейсе List<E>
Overrides:
equals в классе Object
Implementation Requirements:
Эта реализация сначала проверяет, является ли указанный объект этим списком. Если это так, она возвращает true; если нет, она проверяет, является ли указанный объект списком. Если нет, она возвращает false; если да, она итерируется по обоим спискам, сравнивая соответствующие пары элементов. Если какое-либо сравнение возвращает false, этот метод возвращает false. Если один из итераторов заканчивается раньше другого, он возвращает false (поскольку списки имеют разную длину); в противном случае он возвращает true, когда итерации завершаются.
Parameters:
o - объект, который необходимо сравнить на предмет равенства с этим списком
Returns:
true если указанный объект равен этому списку
See Also:
  • Object.hashCode()
  • HashMap

hashCode

public int hashCode()
Возвращает значение хэш-кода для этого списка.
Specified by:
hashCode в интерфейсе Collection<E>
Specified by:
hashCode в интерфейсе List<E>
Overrides:
hashCode в классе Object
Implementation Requirements:
Эта реализация использует точно такой же код, который используется для определения хэш-функции списка в документации для метода List.hashCode().
Returns:
значение хэш-кода для этого списка
See Also:
  • 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 над этим списком и его подсписками.

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

© 1993, 2021, 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/17/docs/api/java.base/java/util/AbstractList.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API