Интерфейс List и класс ArrayList
Интерфейс List сохраняет последовательность добавления элементов и позволяет осуществлять доступ к элементу по индексу. Он расширяет интерфейс Collection и таким образом наследует все его методы, и вместе с тем добавляет свои методы:
- void add(int index, Е obj) — вставляет obj в вызывающий список в позицию, указанную в index . Любые ранее вставленные элементы за указанной позицией вставки смещаются вверх. То есть никакие элементы не перезаписываются.
- bооlеаn addAll (int index, Collection с) — в ставляет все элементы в вызывающий список, начиная с позиции, переданной в index . Все ранее существовавшие элементы за точкой вставки смещаются вверх. То есть никакие элементы не перезаписываются. Возвращает true , если вызывающий список изменяется, и false в противном случае.
- Е get (int index) — возвращает объект, сохраненный в указанной позиции вызывающего списка.
- int indexOf(Object obj) — возвращает индекс первого экземпляра obj в вызывающем списке. Если obj не содержится в списке, возвращается 1.
- int lastlndexOf(Object obj) — возвращает индекс последнего экземпляра obj в вызывающем списке. Если obj не содержится в списке, возвращается 1.
- Listlterator listlterator() — возвращает итератор, указывающий на начало списка.
- Listlterator listlterator(int index) — возвращает итератор, указывающий на заданную позицию в списке.
- Е remove(int index) — удаляет элемент из вызывающего списка в позиции index и возвращает удаленный элемент. Результирующий список уплотняется, то есть элементы, следующие за удаленным, сдвигаются на одну позицию назад.
- Е set (int index, Е obj) — присваивает obj элементу, находящемуся в списке в позиции index.
- default void sort(Comparator c) — сортирует список, используя заданный компаратор (добавлен в версии JDK 8).
- List subList (int start, int end) — возвращает список, включающий элементы от start до end-1 из вызывающего списка. Элементы из возвращаемого списка также сохраняют ссылки в вызывающем списке.
Если посмотреть на методы интерфейса List более внимательно, можно заметить, что почти все их них манипулируют индексом элемента.
Структура иерархии интерфейса List :
2. Особенности класса ArrayList
Одной из реализаций интерфейса List является класс ArrayList . Он поддерживает динамические массивы, которые могут расти по мере необходимости. Элементы ArrayList могут быть абсолютно любых типов, в том числе и null. Элементы в этом виде коллекции могут повторяться.
Данный класс используется чаще всех остальных реализаций коллекции.
Внутреннее устройство класса
Давайте начнем изучение этого класса с рассмотрения его внутреннего устройства, что важно для понимания при выборе класса коллекции.
Объект класса ArrayList , содержит свойства elementData и size . Хранилище значений elementData есть не что иное, как массив определенного типа (указанного в generic). По умолчанию размер этого внутреннего массива будет иметь размер 16 (при создании класса конструктором без параметров). Если пользователь добавит в ArrayList больше 16 элементов, ничего плохого не произойдет (в отличие от массивов, где будет выброшено ArrayIndexOutOfBoundsException исключение). В этом случае просто произойдет пересоздание внутреннего массива elementData , и это произойдет неявно для пользователя.
В случае если вы заранее знаете максимальное количество элементов в создаваемой коллекции, размер массива можно указать передав нужное значение в конструктор ArrayList . Такая программа не будет тратить ресурсы на пересоздание внутреннего массива и конечно же будет работать немного быстрее.
Конструкторы класса
У этого класса есть следующие конструкторы:
- ArrayList() — помогает создать пустую коллекцию с внутренним массивом размер которого будет 16.
- ArrayList(Collection сollection) — создает коллекцию и заполняет ее элементами из передаваемой коллекции collection.
- ArrayList(int capacity) — помогает создать пустую коллекцию с внутренним массивом, размер которого будет равен значению параметра capacity .
Из внутреннего устройства класса следуют его достоинства и недостатки. Рассмотрим их.
Достоинства класса ArrayList
- Быстрый доступ по индексу. Скорость такой операции — O(1).
- Быстрая вставка и удаление элементов с конца. Скорость операций опять же — O(1).
Недостатки класса ArrayList
- Медленная вставка и удаление элементов из середины. Такие операции имеют сложность O(n). Поэтому, если вы понимаете, что вам придется выполнять достаточно много операций такого типа, может быть лучше выбрать другой класс.
3. Добавления элементов в класс ArrayList
Для удобства в следующем списке приведены все методы, позволяющие добавлять элементы в объект класса ArrayList :
- boolean add(E obj) — добавляет obj к вызывающей коллекции. Возвращает true, если obj был добавлен к коллекции. (Интерфейс Collection )
- void add(int index, Е obj) — вставляет obj в вызывающий список в позицию, указанную в index . Любые ранее вставленные элементы за указанной позицией вставки смещаются вверх. То есть никакие элементы не перезаписываются. (Интерфейс List )
- Е set (int index, Е obj) — присваивает obj элементу, находящемуся в списке в позиции index . (Интерфейс List )
- boolean addAll (Collection с) — добавляет все элементы к вызывающей коллекции. Возвращает true , если операция удалась (то есть все элементы добавлены). В противном случае возвращает false . (Интерфейс Collection )
В следующем примере рассмотрим создание объекта класса ArrayList и добавление в него элементов с помощью указанных выше методов:
import java.util.ArrayList; import java.util.List; public class ArrayListAddDemo < public static void main(String[] args) < ListarrayList = new ArrayList<>(); System.out.println("Начальный размер arrayList: " + arrayList.size()); arrayList.add("C"); arrayList.add("A"); arrayList.add("E"); arrayList.add("B"); arrayList.add("D"); arrayList.add("F"); arrayList.add("F"); arrayList.add(1, "A2"); arrayList.set(0, "C2"); System.out.println("Размер arrayList после добавления: " + arrayList.size()); System.out.println("Содержимое arrayList: " + arrayList); System.out.println(arrayList.get(0)); > >
4. Методы класса ArrayList для удаления элементов
Для удобства в следующем списке приведены все методы, позволяющие удалять элементы из объекта класса ArrayList :
- boolean remove(Object obj) — удаляет один экземпляр obj из вызывающей коллекции. Возвращает true , если элемент удален. В противном случае возвращает false . (Интерфейс Collection )
- Е remove(int index) — удаляет элемент из вызывающего списка в позиции index и возвращает удаленный элемент. Результирующий список уплотняется, то есть элементы, следующие за удаленным, сдвигаются на одну позицию назад. (Интерфейс List )
- boolean removeAll(Collection с) — удаляет все элементы из вызывающей коллекции. Возвращает truе , если в результате коллекция изменяется (то есть элементы удалены). В противном случае возвращает false . (Интерфейс Collection )
- boolean retainAll(Collection с) — удаляет все элементы кроме входящих из вызывающей коллекции. Возвращает true , если в результате коллекция изменяется (то есть элементы удалены). В противном случае возвращает false . (Интерфейс Collection )
- void clear() — удаляет все элементы вызывающей коллекции. (Интерфейс Collection )
5. Пример удаления элементов из ArrayList
public class ArrayListRemoveDemo < public static void main(String[] args) < ListarrayList = new ArrayList<>(); arrayList.add("C"); arrayList.add("A"); arrayList.add("E"); arrayList.add("B"); arrayList.add("D"); arrayList.add("F"); arrayList.add("F"); arrayList.add(1, "A2"); arrayList.set(0, "C2"); System.out.println("Содержимое arrayList: " + arrayList); System.out.println("Размер arrayList после добавления: " + arrayList.size()); arrayList.remove("F"); arrayList.remove(2); System.out.println("Размер arrayList после удаления: " + arrayList.size()); System.out.println("Содержимое of arrayList: " + arrayList); > >
6. Пример использования метода removeAll() класса ArrayList
import java.util.ArrayList; import java.util.List; public class ArrayListRemoveAllDemo < public static void main(String[] args) < ListarrayList = new ArrayList<>(); arrayList.add("C"); arrayList.add("A"); arrayList.add("E"); arrayList.add("B"); arrayList.add("D"); arrayList.add("F"); arrayList.add("F"); arrayList.add(1, "A2"); arrayList.set(0, "C2"); List removeElements = List.of("C2", "A2", "AA", "F"); System.out.println("Содержимое arrayList до removeAll: " + arrayList); arrayList.removeAll(removeElements); System.out.println("Содержимое arrayList после removeAll: " + arrayList); > >
7. Пример использования методов addAll(), clear() класса ArrayList
public class ArrayListDemo2 < public static void main(String[] args) < ListarrayList1 = new ArrayList<>(); List arrayList2 = List.of("1", "2"); arrayList1.add("A"); arrayList1.add("B"); arrayList1.add("C"); arrayList1.add("D"); arrayList1.add("E"); arrayList1.add("F"); System.out.println("arrayList1 до добавления " + arrayList1); arrayList1.addAll(3, arrayList2); System.out.println("arrayList1 после добавления " + arrayList1); arrayList1.clear(); System.out.println("arrayList1 после очистки " + arrayList1); > >
8. Пример использования метода retainAll() класса ArrayList
import java.util.ArrayList; import java.util.List; public class ArrayListRetainAllDemo < public static void main(String[] args) < ListarrayList1 = new ArrayList<>(); List arrayList2 = List.of("F", "FF", "E"); arrayList1.add("A"); arrayList1.add("A"); arrayList1.add("B"); arrayList1.add("C"); arrayList1.add("D"); arrayList1.add("E"); arrayList1.add("F"); arrayList1.add("F"); arrayList1.retainAll(arrayList2); System.out.println(arrayList1); > >
9. Получение массива из ArrayList
Достаточно частая задача — это получение массива из коллекции. Для этого в интерфейсе Collection объявлен метод toArray() . Имеются два варианта метода toArray() :
-
Object [] toArray() — создает массив типа Object и записывает в него значения из вызывающей коллекции:
import java.util.Arrays; import java.util.List; public class ArrayListToStringDemo < public static void main(String[] args) < ListarrayList = List.of("C", "A", "E", "B", "D", "F"); Object[] objectArray = arrayList.toArray(); System.out.println(Arrays.toString(objectArray)); > >
import java.util.Arrays; import java.util.List; public class ArrayListToStringDemo < public static void main(String[] args) < ListarrayList = List.of("C", "A", "E", "B", "D", "F"); //1 вариант String[] stringArray1 = new String[arrayList.size()]; arrayList.toArray(stringArray1); System.out.println(Arrays.toString(stringArray1)); //2 вариант String[] stringArray2 = arrayList.toArray(new String[0]); System.out.println(Arrays.toString(stringArray2)); > >
- Интерфейс Collection
- Структуры данных
- Интерфейс Set и классы HashSet, LinkedHashSet
- Интерфейс SortedSet и класс TreeSet
- Интерфейсы Comparable и Comparator
- Интерфейс NavigableSet
- Интерфейсы Queue и Deque
- Класс ArrayDeque
- Класс LinkedList
- Класс PriorityQueue
- Принцип PECS
- Интерфейс Iterator
- Интерфейс ListIterator
- Отображения Map
- Класс Collections
- Backed Collections
- Legacy Classes
- Задания
Интерфейс List и класс ArrayList
Интерфейс List сохраняет последовательность добавления элементов и позволяет осуществлять доступ к элементу по индексу. Он расширяет интерфейс Collection и таким образом наследует все его методы, и вместе с тем добавляет свои методы:
- void add(int index, Е obj) — вставляет obj в вызывающий список в позицию, указанную в index . Любые ранее вставленные элементы за указанной позицией вставки смещаются вверх. То есть никакие элементы не перезаписываются.
- bооlеаn addAll (int index, Collection с) — в ставляет все элементы в вызывающий список, начиная с позиции, переданной в index . Все ранее существовавшие элементы за точкой вставки смещаются вверх. То есть никакие элементы не перезаписываются. Возвращает true , если вызывающий список изменяется, и false в противном случае.
- Е get (int index) — возвращает объект, сохраненный в указанной позиции вызывающего списка.
- int indexOf(Object obj) — возвращает индекс первого экземпляра obj в вызывающем списке. Если obj не содержится в списке, возвращается 1.
- int lastlndexOf(Object obj) — возвращает индекс последнего экземпляра obj в вызывающем списке. Если obj не содержится в списке, возвращается 1.
- Listlterator listlterator() — возвращает итератор, указывающий на начало списка.
- Listlterator listlterator(int index) — возвращает итератор, указывающий на заданную позицию в списке.
- Е remove(int index) — удаляет элемент из вызывающего списка в позиции index и возвращает удаленный элемент. Результирующий список уплотняется, то есть элементы, следующие за удаленным, сдвигаются на одну позицию назад.
- Е set (int index, Е obj) — присваивает obj элементу, находящемуся в списке в позиции index.
- default void sort(Comparator c) — сортирует список, используя заданный компаратор (добавлен в версии JDK 8).
- List subList (int start, int end) — возвращает список, включающий элементы от start до end-1 из вызывающего списка. Элементы из возвращаемого списка также сохраняют ссылки в вызывающем списке.
Если посмотреть на методы интерфейса List более внимательно, можно заметить, что почти все их них манипулируют индексом элемента.
Структура иерархии интерфейса List :
2. Особенности класса ArrayList
Одной из реализаций интерфейса List является класс ArrayList . Он поддерживает динамические массивы, которые могут расти по мере необходимости. Элементы ArrayList могут быть абсолютно любых типов, в том числе и null. Элементы в этом виде коллекции могут повторяться.
Данный класс используется чаще всех остальных реализаций коллекции.
Внутреннее устройство класса
Давайте начнем изучение этого класса с рассмотрения его внутреннего устройства, что важно для понимания при выборе класса коллекции.
Объект класса ArrayList , содержит свойства elementData и size . Хранилище значений elementData есть не что иное, как массив определенного типа (указанного в generic). По умолчанию размер этого внутреннего массива будет иметь размер 16 (при создании класса конструктором без параметров). Если пользователь добавит в ArrayList больше 16 элементов, ничего плохого не произойдет (в отличие от массивов, где будет выброшено ArrayIndexOutOfBoundsException исключение). В этом случае просто произойдет пересоздание внутреннего массива elementData , и это произойдет неявно для пользователя.
В случае если вы заранее знаете максимальное количество элементов в создаваемой коллекции, размер массива можно указать передав нужное значение в конструктор ArrayList . Такая программа не будет тратить ресурсы на пересоздание внутреннего массива и конечно же будет работать немного быстрее.
Конструкторы класса
У этого класса есть следующие конструкторы:
- ArrayList() — помогает создать пустую коллекцию с внутренним массивом размер которого будет 16.
- ArrayList(Collection сollection) — создает коллекцию и заполняет ее элементами из передаваемой коллекции collection.
- ArrayList(int capacity) — помогает создать пустую коллекцию с внутренним массивом, размер которого будет равен значению параметра capacity .
Из внутреннего устройства класса следуют его достоинства и недостатки. Рассмотрим их.
Достоинства класса ArrayList
- Быстрый доступ по индексу. Скорость такой операции — O(1).
- Быстрая вставка и удаление элементов с конца. Скорость операций опять же — O(1).
Недостатки класса ArrayList
- Медленная вставка и удаление элементов из середины. Такие операции имеют сложность O(n). Поэтому, если вы понимаете, что вам придется выполнять достаточно много операций такого типа, может быть лучше выбрать другой класс.
3. Добавления элементов в класс ArrayList
Для удобства в следующем списке приведены все методы, позволяющие добавлять элементы в объект класса ArrayList :
- boolean add(E obj) — добавляет obj к вызывающей коллекции. Возвращает true, если obj был добавлен к коллекции. (Интерфейс Collection )
- void add(int index, Е obj) — вставляет obj в вызывающий список в позицию, указанную в index . Любые ранее вставленные элементы за указанной позицией вставки смещаются вверх. То есть никакие элементы не перезаписываются. (Интерфейс List )
- Е set (int index, Е obj) — присваивает obj элементу, находящемуся в списке в позиции index . (Интерфейс List )
- boolean addAll (Collection с) — добавляет все элементы к вызывающей коллекции. Возвращает true , если операция удалась (то есть все элементы добавлены). В противном случае возвращает false . (Интерфейс Collection )
В следующем примере рассмотрим создание объекта класса ArrayList и добавление в него элементов с помощью указанных выше методов:
import java.util.ArrayList; import java.util.List; public class ArrayListAddDemo < public static void main(String[] args) < ListarrayList = new ArrayList<>(); System.out.println("Начальный размер arrayList: " + arrayList.size()); arrayList.add("C"); arrayList.add("A"); arrayList.add("E"); arrayList.add("B"); arrayList.add("D"); arrayList.add("F"); arrayList.add("F"); arrayList.add(1, "A2"); arrayList.set(0, "C2"); System.out.println("Размер arrayList после добавления: " + arrayList.size()); System.out.println("Содержимое arrayList: " + arrayList); System.out.println(arrayList.get(0)); > >
4. Методы класса ArrayList для удаления элементов
Для удобства в следующем списке приведены все методы, позволяющие удалять элементы из объекта класса ArrayList :
- boolean remove(Object obj) — удаляет один экземпляр obj из вызывающей коллекции. Возвращает true , если элемент удален. В противном случае возвращает false . (Интерфейс Collection )
- Е remove(int index) — удаляет элемент из вызывающего списка в позиции index и возвращает удаленный элемент. Результирующий список уплотняется, то есть элементы, следующие за удаленным, сдвигаются на одну позицию назад. (Интерфейс List )
- boolean removeAll(Collection с) — удаляет все элементы из вызывающей коллекции. Возвращает truе , если в результате коллекция изменяется (то есть элементы удалены). В противном случае возвращает false . (Интерфейс Collection )
- boolean retainAll(Collection с) — удаляет все элементы кроме входящих из вызывающей коллекции. Возвращает true , если в результате коллекция изменяется (то есть элементы удалены). В противном случае возвращает false . (Интерфейс Collection )
- void clear() — удаляет все элементы вызывающей коллекции. (Интерфейс Collection )
5. Пример удаления элементов из ArrayList
public class ArrayListRemoveDemo < public static void main(String[] args) < ListarrayList = new ArrayList<>(); arrayList.add("C"); arrayList.add("A"); arrayList.add("E"); arrayList.add("B"); arrayList.add("D"); arrayList.add("F"); arrayList.add("F"); arrayList.add(1, "A2"); arrayList.set(0, "C2"); System.out.println("Содержимое arrayList: " + arrayList); System.out.println("Размер arrayList после добавления: " + arrayList.size()); arrayList.remove("F"); arrayList.remove(2); System.out.println("Размер arrayList после удаления: " + arrayList.size()); System.out.println("Содержимое of arrayList: " + arrayList); > >
6. Пример использования метода removeAll() класса ArrayList
import java.util.ArrayList; import java.util.List; public class ArrayListRemoveAllDemo < public static void main(String[] args) < ListarrayList = new ArrayList<>(); arrayList.add("C"); arrayList.add("A"); arrayList.add("E"); arrayList.add("B"); arrayList.add("D"); arrayList.add("F"); arrayList.add("F"); arrayList.add(1, "A2"); arrayList.set(0, "C2"); List removeElements = List.of("C2", "A2", "AA", "F"); System.out.println("Содержимое arrayList до removeAll: " + arrayList); arrayList.removeAll(removeElements); System.out.println("Содержимое arrayList после removeAll: " + arrayList); > >
7. Пример использования методов addAll(), clear() класса ArrayList
public class ArrayListDemo2 < public static void main(String[] args) < ListarrayList1 = new ArrayList<>(); List arrayList2 = List.of("1", "2"); arrayList1.add("A"); arrayList1.add("B"); arrayList1.add("C"); arrayList1.add("D"); arrayList1.add("E"); arrayList1.add("F"); System.out.println("arrayList1 до добавления " + arrayList1); arrayList1.addAll(3, arrayList2); System.out.println("arrayList1 после добавления " + arrayList1); arrayList1.clear(); System.out.println("arrayList1 после очистки " + arrayList1); > >
8. Пример использования метода retainAll() класса ArrayList
import java.util.ArrayList; import java.util.List; public class ArrayListRetainAllDemo < public static void main(String[] args) < ListarrayList1 = new ArrayList<>(); List arrayList2 = List.of("F", "FF", "E"); arrayList1.add("A"); arrayList1.add("A"); arrayList1.add("B"); arrayList1.add("C"); arrayList1.add("D"); arrayList1.add("E"); arrayList1.add("F"); arrayList1.add("F"); arrayList1.retainAll(arrayList2); System.out.println(arrayList1); > >
9. Получение массива из ArrayList
Достаточно частая задача — это получение массива из коллекции. Для этого в интерфейсе Collection объявлен метод toArray() . Имеются два варианта метода toArray() :
-
Object [] toArray() — создает массив типа Object и записывает в него значения из вызывающей коллекции:
import java.util.Arrays; import java.util.List; public class ArrayListToStringDemo < public static void main(String[] args) < ListarrayList = List.of("C", "A", "E", "B", "D", "F"); Object[] objectArray = arrayList.toArray(); System.out.println(Arrays.toString(objectArray)); > >
import java.util.Arrays; import java.util.List; public class ArrayListToStringDemo < public static void main(String[] args) < ListarrayList = List.of("C", "A", "E", "B", "D", "F"); //1 вариант String[] stringArray1 = new String[arrayList.size()]; arrayList.toArray(stringArray1); System.out.println(Arrays.toString(stringArray1)); //2 вариант String[] stringArray2 = arrayList.toArray(new String[0]); System.out.println(Arrays.toString(stringArray2)); > >
- Интерфейс Collection
- Структуры данных
- Интерфейс Set и классы HashSet, LinkedHashSet
- Интерфейс SortedSet и класс TreeSet
- Интерфейсы Comparable и Comparator
- Интерфейс NavigableSet
- Интерфейсы Queue и Deque
- Класс ArrayDeque
- Класс LinkedList
- Класс PriorityQueue
- Принцип PECS
- Интерфейс Iterator
- Интерфейс ListIterator
- Отображения Map
- Класс Collections
- Backed Collections
- Legacy Classes
- Задания
31.9. Java – Класс ArrayList
Класс ArrayList в Java расширяет AbstractList и реализует интерфейс List. ArrayList поддерживает динамические массивы, которые могут расти по мере необходимости.
Стандартные массивы Java имеют фиксированную длину. После создания массивов они не могут расти или сокращаться, а это значит, что вы должны заранее знать, сколько элементов будет удерживать массив.
Списки массивов создаются с начальным размером. Когда этот размер превышен, коллекция автоматически увеличивается. Когда объекты удаляются, массив может быть сокращен.
Конструкторы
Ниже приведен список конструкторов, предоставляемых классом ArrayList.
№ | Конструктор и описание |
1 | ArrayList( ) Этот конструктор создает пустой список массивов. |
2 | ArrayList(Collection c) Этот конструктор строит список массивов, который инициализируется элементами коллекции c. |
3 | ArrayList(int capacity) Этот конструктор создает список массивов с указанной начальной capacity. Емкость — это размер базового массива, который используется для хранения элементов. Емкость растет автоматически по мере добавления элементов в список массивов. |
Методы
Помимо методов, унаследованных от родительских классов, ArrayList определяет следующие методы:
№ | Метод и описание |
1 | void add(int index, Object element) Вставляет указанный элемент в указанный индекс позиции в этом списке. Выбрасывает IndexOutOfBoundsException, если указанный индекс выходит за допустимые пределы (index size()). |
2 | boolean add(Object o) Добавляет указанный элемент в конец этого списка. |
3 | boolean addAll(Collection c) Добавляет все элементы в указанной коллекции в конец этого списка в том порядке, в котором они возвращаются итератором указанной коллекции. Вызывает NullPointerException, если указанная коллекция имеет значение null (нулевая). |
4 | boolean addAll(int index, Collection c) Вставляет все элементы указанной коллекции в этот список, начиная с указанной позиции. Вызывает NullPointerException, если указанная коллекция имеет значение null. |
5 | void clear() Удаляет все элементы из этого списка. |
6 | Object clone() Возвращает неглубокую копию этого массива. |
7 | boolean contains(Object o) Возвращает true, если этот список содержит указанный элемент. Если точнее, то возвращает true тогда и только тогда, когда этот список содержит хотя бы один элемент e такой, что (o==null ? e==null : o.equals(e)). |
8 | void ensureCapacity(int minCapacity) Увеличивает емкость этого экземпляра ArrayList, если это необходимо, чтобы гарантировать, что он может удерживать, по крайней мере, количество элементов, заданных аргументом минимальной емкости. |
9 | Object get(int index) Возвращает элемент в указанной позиции в этом списке. Вызывает IndexOutOfBoundsException, если указанный индекс выходит за допустимые пределы (index = size()). |
10 | int indexOf(Object o) Возвращает индекс в этом списке первого упоминания указанного элемента или -1, если List не содержит этот элемент. |
11 | int lastIndexOf(Object o) Возвращает индекс в этом списке последнего упоминания указанного элемента или -1, если List не содержит этот элемент. |
12 | Object remove(int index) Удаляет элемент в указанной позиции в этом списке. Вызывает IndexOutOfBoundsException, если индекс выходит за допустимые пределы (index = size()). |
13 | protected void removeRange(int fromIndex, int toIndex) Удаляет из этого списка все элементы, индекс которых находится между fromIndex, включительно, и toIndex, исключительно. |
14 | Object set(int index, Object element) Заменяет элемент в указанной позиции в этом списке указанным элементом. Вызывает IndexOutOfBoundsException, если указанный индекс выходит за допустимые пределы (index = size()). |
15 | int size() Возвращает количество элементов в этом списке. |
16 | Object[] toArray() Возвращает массив, содержащий все элементы в этом списке в правильном порядке. Вызывает NullPointerException, если указанный массив равен null (нулевой). |
17 | Object[] toArray(Object[] a) Возвращает массив, содержащий все элементы в этом списке в правильном порядке; тип выполнения возвращаемого массива — тип указанного массива. |
18 | void trimToSize() Обрезает емкость этого экземпляра ArrayList до его текущих размеров. |
Пример
Следующая демонстрирует работу нескольких методов, поддерживаемых ArrayList в Java:
import java.util.*; public class ArrayListDemo < public static void main(String args[]) < // Инициализация ArrayList // Создаём ArrayList ArrayList al = new ArrayList(); System.out.println("Изначальный размер al: " + al.size()); // Добавляем элементы в ArrayList al.add("C"); al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); al.add(1, "A2"); System.out.println("Размер al после добавлений: " + al.size()); // Выводим на экран элементы ArrayList System.out.println("Содержимое al: " + al); // Удаляем элементы из ArrayList al.remove("F"); al.remove(2); System.out.println("Размер al после удалений: " + al.size()); System.out.println("Содержимое al: " + al); >>
Получим следующий результат:
Изначальный размер al: 0 Размер al после добавлений: 7 Содержимое al: [C, A2, A, E, B, D, F] Размер al после удалений: 5 Содержимое al: [C, A2, E, B, D]
Оглавление
- 1. Java – Самоучитель для начинающих
- 2. Java – Обзор языка
- 3. Java – Установка и настройка
- 4. Java – Синтаксис
- 5. Java – Классы и объекты
- 6. Java – Конструкторы
- 7. Java – Типы данных и литералы
- 8. Java – Типы переменных
- 9. Java – Модификаторы
- 10. Java – Операторы
- 11. Java – Циклы и операторы цикла
- 11.1. Java – Цикл while
- 11.2. Java – Цикл for
- 11.3. Java – Улучшенный цикл for
- 11.4. Java – Цикл do..while
- 11.5. Java – Оператор break
- 11.6. Java – Оператор continue
- 12. Java – Операторы принятия решений
- 12.1. Java – Оператор if
- 12.2. Java – Оператор if..else
- 12.3. Java – Вложенный оператор if
- 12.4. Java – Оператор switch..case
- 12.5. Java – Условный оператор (? 🙂
- 13. Java – Числа
- 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
- 13.2. Java – Метод compareTo()
- 13.3. Java – Метод equals()
- 13.4. Java – Метод valueOf()
- 13.5. Java – Метод toString()
- 13.6. Java – Метод parseInt()
- 13.7. Java – Метод Math.abs()
- 13.8. Java – Метод Math.ceil()
- 13.9. Java – Метод Math.floor()
- 13.10. Java – Метод Math.rint()
- 13.11. Java – Метод Math.round()
- 13.12. Java – Метод Math.min()
- 13.13. Java – Метод Math.max()
- 13.14. Java – Метод Math.exp()
- 13.15. Java – Метод Math.log()
- 13.16. Java – Метод Math.pow()
- 13.17. Java – Метод Math.sqrt()
- 13.18. Java – Метод Math.sin()
- 13.19. Java – Метод Math.cos()
- 13.20. Java – Метод Math.tan()
- 13.21. Java – Метод Math.asin()
- 13.22. Java – Метод Math.acos()
- 13.23. Java – Метод Math.atan()
- 13.24. Java – Метод Math.atan2()
- 13.25. Java – Метод Math.toDegrees()
- 13.26. Java – Метод Math.toRadians()
- 13.27. Java – Метод Math.random()
- 14. Java – Символы
- 14.1. Java – Метод Character.isLetter()
- 14.2. Java – Метод Character.isDigit()
- 14.3. Java – Метод Character.isWhitespace()
- 14.4. Java – Метод Character.isUpperCase()
- 14.5. Java – Метод Character.isLowerCase()
- 14.6. Java – Метод Character.toUpperCase()
- 14.7. Java – Метод Character.toLowerCase()
- 14.8. Java – Метод Character.toString()
- 15. Java – Строки
- 15.1. Java – Метод charAt()
- 15.2. Java – Метод compareTo()
- 15.3. Java – Метод compareToIgnoreCase()
- 15.4. Java – Метод concat()
- 15.5. Java – Метод contentEquals()
- 15.6. Java – Метод copyValueOf()
- 15.7. Java – Метод endsWith()
- 15.8. Java – Метод equals()
- 15.9. Java – Метод equalsIgnoreCase()
- 15.10. Java – Метод getBytes()
- 15.11. Java – Метод getChars()
- 15.12. Java – Метод hashCode()
- 15.13. Java – Метод indexOf()
- 15.14. Java – Метод intern()
- 15.15. Java – Метод lastIndexOf()
- 15.16. Java – Метод length()
- 15.17. Java – Метод matches()
- 15.18. Java – Метод regionMatches()
- 15.19. Java – Метод replace()
- 15.20. Java – Метод replaceAll()
- 15.21. Java – Метод replaceFirst()
- 15.22. Java – Метод split()
- 15.23. Java – Метод startsWith()
- 15.24. Java – Метод subSequence()
- 15.25. Java – Метод substring()
- 15.26. Java – Метод toCharArray()
- 15.27. Java – Метод toLowerCase()
- 15.28. Java – Метод toString()
- 15.29. Java – Метод toUpperCase()
- 15.30. Java – Метод trim()
- 15.31. Java – Метод valueOf()
- 15.32. Java – Классы StringBuilder и StringBuffer
- 15.32.1. Java – Метод append()
- 15.32.2. Java – Метод reverse()
- 15.32.3. Java – Метод delete()
- 15.32.4. Java – Метод insert()
- 15.32.5. Java – Метод replace()
- 16. Java – Массивы
- 17. Java – Дата и время
- 18. Java – Регулярные выражения
- 19. Java – Методы
- 20. Java – Потоки ввода/вывода, файлы и каталоги
- 20.1. Java – Класс ByteArrayInputStream
- 20.2. Java – Класс DataInputStream
- 20.3. Java – Класс ByteArrayOutputStream
- 20.4. Java – Класс DataOutputStream
- 20.5. Java – Класс File
- 20.6. Java – Класс FileReader
- 20.7. Java – Класс FileWriter
- 21. Java – Исключения
- 21.1. Java – Встроенные исключения
- 22. Java – Вложенные и внутренние классы
- 23. Java – Наследование
- 24. Java – Переопределение
- 25. Java – Полиморфизм
- 26. Java – Абстракция
- 27. Java – Инкапсуляция
- 28. Java – Интерфейсы
- 29. Java – Пакеты
- 30. Java – Структуры данных
- 30.1. Java – Интерфейс Enumeration
- 30.2. Java – Класс BitSet
- 30.3. Java – Класс Vector
- 30.4. Java – Класс Stack
- 30.5. Java – Класс Dictionary
- 30.6. Java – Класс Hashtable
- 30.7. Java – Класс Properties
- 31. Java – Коллекции
- 31.1. Java – Интерфейс Collection
- 31.2. Java – Интерфейс List
- 31.3. Java – Интерфейс Set
- 31.4. Java – Интерфейс SortedSet
- 31.5. Java – Интерфейс Map
- 31.6. Java – Интерфейс Map.Entry
- 31.7. Java – Интерфейс SortedMap
- 31.8. Java – Класс LinkedList
- 31.9. Java – Класс ArrayList
- 31.10. Java – Класс HashSet
- 31.11. Java – Класс LinkedHashSet
- 31.12. Java – Класс TreeSet
- 31.13. Java – Класс HashMap
- 31.14. Java – Класс TreeMap
- 31.15. Java – Класс WeakHashMap
- 31.16. Java – Класс LinkedHashMap
- 31.17. Java – Класс IdentityHashMap
- 31.18. Java – Алгоритмы Collection
- 31.19. Java – Iterator и ListIterator
- 31.20. Java – Comparator
- 32. Java – Дженерики
- 33. Java – Сериализация
- 34. Java – Сеть
- 34.1. Java – Обработка URL
- 35. Java – Отправка Email
- 36. Java – Многопоточность
- 36.1. Java – Синхронизация потоков
- 36.2. Java – Межпоточная связь
- 36.3. Java – Взаимная блокировка потоков
- 36.4. Java – Управление потоками
- 37. Java – Основы работы с апплетами
- 38. Java – Javadoc
Зачем массивы вообще нужны?
Я думаю, что массивы и особенно листы (динамические массивы) бесполезны, но раз они используются, то значит нет? Вот я думаю типа так: если массив отсортированный, то отсортированный он для бинарного поиска, но для бинарного поиска есть двоичное дерево поиска (сбалансированное), вставка/удаление в котором будет О(лог н), когда в массиве О(н), то есть отсортированный масив < сбалансированное двоичное дерево поиска, а если массив неотсортированный, то зачем он нам нужен, если мы можем в таком случае использовать связной список? Ибо тогда поиск одинаков, а вставка/удаление О(1). А динамический массив плох, ибо каждый раз при вставке служба, которая участвует в распределении памяти, будет искать новые места в памяти, где будет n + 1 (+ 1 это новый элемент) свободных ячеек подряд. То есть динамический массив тратит много усилий на поиски ячеек, когда связной список просто укажет ссылку на след. элемент. Ну а если динамический массив отсортирован, то юзаем сбалансированное двоичное дерево поиска, где тоже при вставке/удалении не будет возни с ячейками, просто поменять ссылки и сбалансировать. Так в чем же профит массивов? Почему в каждом первом коде я вижу массивы и листы (динамические массивы или списки)?
Отслеживать
69.8k 9 9 золотых знаков 67 67 серебряных знаков 124 124 бронзовых знака