Класс 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 |
Единственный конструктор. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
add |
Вставляет указанный элемент в указанную позицию в этом списке (необязательная операция). |
boolean |
add |
Добавляет указанный элемент в конец этого списка (необязательная операция). |
boolean |
addAll |
Вставляет все элементы указанной коллекции в этот список в указанной позиции (необязательная операция). |
void |
clear() |
Удаляет все элементы из этого списка (необязательная операция). |
boolean |
equals |
Сравнивает указанный объект с этим списком на равенство. |
abstract E |
get |
Возвращает элемент в указанной позиции в этом списке. |
int |
hashCode() |
Возвращает значение хэш-кода для этого списка. |
int |
indexOf |
Возвращает индекс первого вхождения указанного элемента в этот список или -1, если этот список не содержит элемент. |
Iterator<E> |
iterator() |
Возвращает итератор по элементам в этом списке в правильном порядке. |
int |
lastIndexOf |
Возвращает индекс последнего вхождения указанного элемента в этот список или -1, если этот список не содержит элемент. |
ListIterator<E> |
listIterator() |
Возвращает итератор списка по элементам в этом списке (в правильном порядке). |
ListIterator<E> |
listIterator |
Возвращает итератор списка по элементам в этом списке (в правильном порядке), начиная с указанной позиции в списке. |
E |
remove |
Удаляет элемент в указанной позиции в этом списке (необязательная операция). |
protected void |
removeRange |
Удаляет из этого списка все элементы, чей индекс находится между fromIndex, включительно, и toIndex, не включительно. |
E |
set |
Заменяет элемент в указанной позиции в этом списке указанным элементом (необязательная операция). |
List<E> |
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, 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)
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)
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:
hashCode
public int hashCode()
- Specified by:
-
hashCodeв интерфейсеCollection<E> - Specified by:
-
hashCodeв интерфейсеList<E> - Overrides:
-
hashCodeв классеObject - Implementation Requirements:
- Эта реализация использует точно такой же код, который используется для определения хэш-функции списка в документации для метода
List.hashCode(). - Returns:
- значение хэш-кода для этого списка
- See Also:
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