Класс 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 Количество раз, когда этот список был структурно изменён. |
Конструкторы
| Модификатор | Конструктор и описание |
|---|---|
protected |
AbstractList() Единственный конструктор. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
boolean |
add(E e) Добавляет указанный элемент в конец этого списка (необязательная операция). |
void |
add(int index,
E element) Вставляет указанный элемент в указанную позицию в этом списке (необязательная операция). |
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) Удаляет из этого списка все элементы, индекс которых находится между |
E |
set(int index,
E element) Заменяет элемент в указанной позиции в этом списке указанным элементом (необязательная операция). |
List<E> |
subList(int fromIndex,
int toIndex) Возвращает представление части этого списка между указанной |
Методы, унаследованные от класса java.util.AbstractCollection
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, size, toArray, toArray, toString Методы, унаследованные от класса java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait Методы, унаследованные от интерфейса java.util.List
addAll, contains, containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, size, sort, spliterator, toArray, toArray Методы, унаследованные от интерфейса java.util.Collection
parallelStream, removeIf, stream Методы, унаследованные от интерфейса java.lang.Iterable
forEach Поля
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(size(), e).
Обратите внимание, что эта реализация выбрасывает исключение UnsupportedOperationException, если не переопределён add(int, E).
- Определено в:
-
addв интерфейсеCollection<E> - Определено в:
-
addв интерфейсеList<E> - Переопределено в:
-
addв классеAbstractCollection<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) Заменяет элемент по указанному индексу в этом списке указанным элементом (необязательная операция).
Эта реализация всегда выбрасывает исключение UnsupportedOperationException.
- Определено в:
-
setв интерфейсеList<E> - Параметры:
-
index- индекс заменяемого элемента -
element- элемент, который нужно сохранить по указанному индексу - Возвращает:
- предыдущий элемент по указанному индексу
- Исключения:
-
UnsupportedOperationException- если операцияsetне поддерживается этим списком -
ClassCastException- если класс указанного элемента не позволяет добавить его в этот список -
NullPointerException- если указанный элемент равен null, а этот список не допускает null-элементов -
IllegalArgumentException- если какое-либо свойство указанного элемента не позволяет добавить его в этот список -
IndexOutOfBoundsException- если индекс вне диапазона (index < 0 || index >= size())
add
public void add(int index,
E element) Вставляет указанный элемент по указанному индексу в этот список (необязательная операция). Сдвигает текущий элемент в этой позиции (если есть) и все последующие элементы вправо (увеличивает их индексы).
Эта реализация всегда выбрасывает исключение UnsupportedOperationException.
- Определено в:
-
addв интерфейсеList<E> - Параметры:
-
index- индекс, по которому нужно вставить указанный элемент -
element- вставляемый элемент - Исключения:
-
UnsupportedOperationException- если операцияaddне поддерживается этим списком -
ClassCastException- если класс указанного элемента не позволяет добавить его в этот список -
NullPointerException- если указанный элемент равен null, а этот список не допускает null-элементов -
IllegalArgumentException- если какое-либо свойство указанного элемента не позволяет добавить его в этот список -
IndexOutOfBoundsException- если индекс вне диапазона (index < 0 || index > size())
remove
public E remove(int index)
Удаляет элемент по указанному индексу в этом списке (необязательная операция). Сдвигает все последующие элементы влево (уменьшает их индексы). Возвращает элемент, который был удалён из списка.
Эта реализация всегда выбрасывает исключение UnsupportedOperationException.
- Определено в:
-
removeв интерфейсеList<E> - Параметры:
-
index- индекс удаляемого элемента - Возвращает:
- предыдущий элемент по указанному индексу
- Исключения:
-
UnsupportedOperationException- если операцияremoveне поддерживается этим списком -
IndexOutOfBoundsException- если индекс вне диапазона (index < 0 || index >= size())
indexOf
public int indexOf(Object o)
Возвращает индекс первого вхождения указанного элемента в этот список, или -1, если этот список не содержит элемент. Более формально, возвращает наименьший индекс i, такой что (o==null ? get(i)==null : o.equals(get(i))), или -1, если такого индекса нет.
Эта реализация сначала получает итератор списка (с listIterator()). Затем перебирает список, пока не найдёт указанный элемент или не достигнет конца списка.
- Определено в:
-
indexOfв интерфейсеList<E> - Параметры:
-
o- искомый элемент - Возвращает:
- индекс первого вхождения указанного элемента в этот список, или -1, если этот список не содержит элемент
- Исключения:
-
ClassCastException- если тип указанного элемента несовместим со списком (необязательно) -
NullPointerException- если указанный элемент равен null, а этот список не допускает null-элементов (необязательно)
lastIndexOf
public int lastIndexOf(Object o)
Возвращает индекс последнего вхождения указанного элемента в этот список, или -1, если этот список не содержит элемент. Более формально, возвращает наибольший индекс i, такой что (o==null ? get(i)==null : o.equals(get(i))), или -1, если такого индекса нет.
Эта реализация сначала получает итератор списка, указывающий на конец списка (с listIterator(size())). Затем итеративно перебирает список в обратном порядке, пока не найдёт указанный элемент или не достигнет начала списка.
- Определено в:
-
lastIndexOfв интерфейсеList<E> - Параметры:
-
o- искомый элемент - Возвращает:
- индекс последнего вхождения указанного элемента в этот список, или -1, если этот список не содержит элемент
- Исключения:
-
ClassCastException- если тип указанного элемента несовместим со списком (необязательно) -
NullPointerException- если указанный элемент равен null, а этот список не допускает null-элементов (необязательно)
clear
public void clear()
Удаляет все элементы из этого списка (необязательная операция). Список будет пустым после возвращения этого вызова.
Эта реализация вызывает removeRange(0, size()).
Обратите внимание, что эта реализация выбрасывает исключение UnsupportedOperationException, если не переопределены методы remove(int
index) или removeRange(int fromIndex, int toIndex).
- Определено в:
-
clearв интерфейсеCollection<E> - Определено в:
-
clearв интерфейсеList<E> - Переопределено в:
-
clearв классеAbstractCollection<E> - Исключения:
-
UnsupportedOperationException- если операцияclearне поддерживается этим списком
addAll
public boolean addAll(int index,
Collection<? extends E> c) Вставляет все элементы указанного набора в этот список по указанному индексу (необязательная операция). Сдвигает текущий элемент в этой позиции (если есть) и все последующие элементы вправо (увеличивает их индексы). Новые элементы появятся в этом списке в том порядке, в котором они возвращаются итератором указанного набора. Поведение этой операции не определено, если указанный набор изменяется во время выполнения операции. (Обратите внимание, что это произойдёт, если указанный набор — это этот список, и он не пустой.)
Эта реализация получает итератор над указанным набором и перебирает его, вставляя полученные из итератора элементы в этот список в соответствующей позиции по одному, используя метод add(int, E). Многие реализации переопределяют этот метод для повышения эффективности.
Обратите внимание, что эта реализация выбрасывает исключение UnsupportedOperationException, если не переопределён add(int, E).
- Указано в:
-
addAllв интерфейсеList<E> - Параметры:
-
index- индекс, в который вставляется первый элемент из указанной коллекции -
c- коллекция, содержащая элементы, которые должны быть добавлены в этот список - Возвращает:
-
trueесли этот список изменился в результате вызова - Исключения:
-
UnsupportedOperationException- если операцияaddAllне поддерживается этим списком -
ClassCastException- если класс элемента указанной коллекции препятствует его добавлению в этот список -
NullPointerException- если указанная коллекция содержит один или несколько нулевых элементов, и этот список не допускает нулевых элементов, или если указанная коллекция равна null -
IllegalArgumentException- если какое-либо свойство элемента указанной коллекции препятствует его добавлению в этот список -
IndexOutOfBoundsException- если индекс находится вне допустимого диапазона (index < 0 || index > size())
iterator
public Iterator<E> iterator()
Возвращает итератор по элементам в этом списке в правильной последовательности.
Это реализация возвращает простую реализацию интерфейса итератора, полагаясь на методы списков: size(), get(int), и remove(int) .
Обратите внимание, что итератор, возвращаемый этим методом, будет выбрасывать UnsupportedOperationException в ответ на метод remove, если метод remove(int) списка не переопределен.
Эта реализация может вызывать исключения времени выполнения при одновременном изменении, как описано в спецификации для (защищённого) поля modCount.
- Указано в:
-
iteratorв интерфейсеIterable<E> - Указано в:
-
iteratorв интерфейсеCollection<E> - Указано в:
-
iteratorв интерфейсеList<E> - Указано в:
-
iteratorв классеAbstractCollection<E> - Возвращает:
- итератор по элементам в этом списке в правильной последовательности
listIterator
public ListIterator<E> listIterator()
Возвращает итератор списка по элементам в этом списке (в правильной последовательности).
Эта реализация возвращает listIterator(0).
- Указано в:
-
listIteratorв интерфейсеList<E> - Возвращает:
- итератор списка по элементам в этом списке (в правильной последовательности)
- См. также:
listIterator(int)
listIterator
public ListIterator<E> listIterator(int index)
Возвращает итератор списка по элементам в этом списке (в правильной последовательности), начиная с указанной позиции в списке. Указанный индекс указывает на первый элемент, который будет возвращён начальным вызовом next. Начальный вызов previous вернёт элемент с указанным индексом минус один.
Эта реализация возвращает простую реализацию интерфейса 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.
- Указано в:
-
listIteratorв интерфейсеList<E> - Параметры:
-
index- индекс первого элемента, который будет возвращён итератором списка (вызовомnext) - Возвращает:
- итератор списка по элементам в этом списке (в правильной последовательности), начиная с указанной позиции в списке
- Исключения:
-
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. Семантика списка, возвращённого этим методом, становится неопределённой, если базовый список (то есть, этот список) изменяется структурно каким-либо образом, кроме как через возвращаемый список. (Структурные изменения - это те, которые изменяют размер этого списка или иначе нарушают его таким образом, что текущие итерации могут давать неверные результаты.)
Эта реализация возвращает список, который является подклассом AbstractList. Подкласс хранит в частных полях смещение subList внутри базового списка, размер 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 если это не так.
- Указано в:
-
subListв интерфейсеList<E> - Параметры:
-
fromIndex- нижняя граница (включительно) subList -
toIndex- верхняя граница (исключая) subList - Возвращает:
- представление указанного диапазона в этом списке
- Исключения:
-
IndexOutOfBoundsException- если индекс конечной точки находится вне диапазона(fromIndex < 0 || toIndex > size) -
IllegalArgumentException- если индексы конечных точек заданы в обратном порядке(fromIndex > toIndex)
equals
public boolean equals(Object o)
Сравнивает указанный объект с этим списком на равенство. Возвращает true тогда и только тогда, когда указанный объект также является списком, оба списка имеют одинаковый размер, и все соответствующие пары элементов в двух списках равны. (Два элемента e1 и e2 равны, если (e1==null ? e2==null :
e1.equals(e2)).) Другими словами, два списка определяются как равные, если они содержат одни и те же элементы в одном и том же порядке.
Эта реализация сначала проверяет, является ли указанный объект этим списком. Если это так, она возвращает true; в противном случае проверяет, является ли указанный объект списком. Если нет, она возвращает false; если да, она перебирает оба списка, сравнивая соответствующие пары элементов. Если какое-либо сравнение возвращает false, этот метод возвращает false. Если какой-либо итератор заканчивается элементами раньше другого, он возвращает false (поскольку списки имеют разную длину); в противном случае он возвращает true по завершении итераций.
- Указано в:
-
equalsв интерфейсеCollection<E> - Указано в:
-
equalsв интерфейсеList<E> - Переопределяет:
-
equalsв классеObject - Параметры:
-
o- объект, который нужно сравнить на равенство с этим списком - Возвращает:
-
trueесли указанный объект равен этому списку - См. также:
-
Object.hashCode(),HashMap
hashCode
public int hashCode()
Возвращает значение хэш-кода для этого списка.
Эта реализация использует точно такой же код, который используется для определения функции хэширования списка в документации для метода List.hashCode().
- Указано в:
-
hashCodeв интерфейсеCollection<E> - Указано в:
-
hashCodeв интерфейсеList<E> - Переопределяет:
-
hashCodeв классеObject - Возвращает:
- значение хэш-кода для этого списка
- См. также:
-
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.