Класс 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, не включительно. |
Методы, объявленные в классе 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.util.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)
- 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
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)).) Другими словами, два списка определяются как равные, если они содержат одинаковые элементы в том же порядке.- Определено в:
-
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, 2023, 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/21/docs/api/java.base/java/util/AbstractList.html