ArrayList
ArrayList – это класс, позволяющий создавать списки, входит в состав библиотеки java.util. В Java объекты типа ArrayList иногда называют списочными массивами.
Списки, наряду с множествами и словарями, относятся к коллекциям.
Кроме ArrayList существует другие типы списков – LinkedList, Vector, Stack. List является интерфейсом всех четырех классов. Отличие между разными списками заключается во внутреннем способе работы с памятью. Так LinkedList будет быстрее, если приходится часто вставлять в середину или удалять элементы. ArrayList быстрее для операций взятия и изменения значений элементов. Заметим, тип переменной может быть интерфейсом, а вот объект – всегда создаваться от конкретного класса. Например: List a = new ArrayList<>()
.
Примечание. В Java есть понятия сужения и расширения типов. Так переменной типа Object может быть присвоен любой объект: Object var = "Hello"
. Сужение типа: String str = (String) var
.
В отличие от обычных массивов, списки являются автоматически расширяемыми. Это значит, что можно менять количество составляющих их элементов, добавлять и удалять элементы из любого места структуры.
В Java элементы списка могут быть разного типа или же только одного. Во втором случае, который используется чаще, тип указывается в угловых скобках:
ArrayList a1 = new ArrayList(); a1.add(1); a1.add("Box"); System.out.println(a1.get(0)); System.out.println(a1.get(1)); ArrayList<String> a2 = new ArrayList<>(); a2.add("cd"); a2.add(0, "ab"); System.out.println(a2.toString());
ArrayList относится к так называемым дженерикам (generics), т. е. обобщениям. От таких классов создаются объекты-контейнеры, для которых можно указывать тип входящих в контейнер объектов. При этом входящие в состав контейнера объекты должны быть именно объектами, а не примитивными типами данных. Так вместо int следует использовать Integer.
Класс ArrayList содержит множество методов для работы со списками. Ключевыми являются add(), get(), set(), remove(), size().
Метод add() по умолчанию добавляет элемент в конец списка. Однако первым аргументом можно передать позицию вставки. Метод set() не добавляет элемент, а заменяет существующий в указанной позиции. Поэтому всегда требует указания индекса заменяемого элемента.
import java.util.ArrayList; public class ArrayListMethods { public static void main(String[] args) { ArrayList<Test> tests = new ArrayList<>(); tests.add(new Test(10)); Test t = new Test(20); tests.add(t); tests.add(new Test(99)); for (Test test : tests) { System.out.print(test.n + " "); } System.out.println(); tests.set(2, new Test(90)); tests.remove(0); for (Test test : tests) { System.out.print(test.n + " "); } System.out.println(); } } class Test { int n; Test(int num) { this.n = num; } }
Результат выполнения:
10 20 99 20 90