Класс AbstractList<E>
- Параметры типа:
E- тип элементов в этом списке
- Все реализуемые интерфейсы:
Iterable<E>, Collection<E>, List<E>, SequencedCollection<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 |
Единственный конструктор. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
add |
Вставляет указанный элемент в указанную позицию этого списка (необязательная операция). |
boolean |
add |
Добавляет указанный элемент в конец этого списка (необязательная операция). |
boolean |
addAll |
Вставляет все элементы указанной коллекции в этот список, начиная с указанной позиции (необязательная операция). |
void |
clear() |
Удаляет все элементы из этого списка (необязательная операция). |
boolean |
equals |
Сравнивает указанный объект с этим списком на равенство. |
abstract E |
get |
Возвращает элемент, находящийся в указанной позиции этого списка. |
int |
hashCode() |
Возвращает значение хеш-кода этого списка. |
int |
indexOf |
Возвращает индекс первого вхождения указанного элемента в этот список или -1, если список не содержит этот элемент. |
Iterator |
iterator() |
Возвращает итератор для перебора элементов этого списка в надлежащем порядке. |
int |
lastIndexOf |
Возвращает индекс последнего вхождения указанного элемента в этот список или -1, если список не содержит этот элемент. |
ListIterator |
listIterator() |
Возвращает итератор списка для перебора элементов этого списка (в надлежащем порядке). |
ListIterator |
listIterator |
Возвращает итератор списка для перебора элементов этого списка (в надлежащем порядке), начиная с указанной позиции в списке. |
E |
remove |
Удаляет элемент, находящийся в указанной позиции этого списка (необязательная операция). |
protected void |
removeRange |
Удаляет из этого списка все элементы, индексы которых находятся в диапазоне от fromIndex включительно до toIndex исключительно. |
E |
set |
Заменяет элемент, находящийся в указанной позиции этого списка, указанным элементом (необязательная операция). |
List |
subList |
Возвращает представление части этого списка между указанными fromIndex включительно и toIndex исключительно. |
Методы, объявленные в классе AbstractCollection
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray, toString
Методы, объявленные в интерфейсе Collection
parallelStream, removeIf, stream, toArray
Методы, объявленные в интерфейсе List
addAll, addFirst, addLast, contains, containsAll, getFirst, getLast, isEmpty, remove, removeAll, removeFirst, removeLast, replaceAll, retainAll, reversed, 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)
- Определен в:
-
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)
i, для которого выполняется Objects.equals(o, get(i)), или -1, если такого индекса нет.- Определен в:
-
indexOfв интерфейсеList<E> - Требования к реализации:
- Эта реализация сначала получает итератор списка (с помощью
listIterator()). Затем она перебирает список, пока не найдет указанный элемент или не достигнет конца списка. - Параметры:
-
o— искомый элемент - Возвращает:
- индекс первого вхождения указанного элемента в этом списке или -1, если список не содержит этот элемент
- Выбрасывает:
-
ClassCastException— если тип указанного элемента несовместим с этим списком (необязательно) -
NullPointerException— если указанный элемент равен null, а этот список не допускает элементы null (необязательно)
lastIndexOf
public int lastIndexOf(Object o)
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
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, если указанный объект равен этому списку - См. также:
hashCode
public int hashCode()
- Определен в:
-
hashCodeв интерфейсеCollection<E> - Определен в:
-
hashCodeв интерфейсеList<E> - Переопределяет:
-
hashCodeв классеObject - Требования к реализации:
- Эта реализация использует в точности тот же код, который применяется для определения функции хеширования списка в документации к методу
List.hashCode(). - Возвращает:
- значение хеш-кода этого списка
- См. также:
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, 2025, 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/25/docs/api/java.base/java/util/AbstractList.html