Spec-Zone.ru › OpenJDK 8

Класс 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)

Удаляет из этого списка все элементы, индекс которых находится между 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, 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.

Spec-Zone.ru

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