Java ArrayList
Класс ArrayList — это массив, который можно динамически изменять. Его отличие от обычных массивов в том, что у него нет фиксированного ограничения размера, и мы можем добавлять или удалять элементы.
ArrayList наследуется от AbstractList и реализует интерфейс List.

Класс ArrayList находится в пакете java.util. Перед использованием его нужно импортировать. Синтаксис имеет следующий вид:
import java.util.ArrayList; // 引入 ArrayList 类 ArrayList<E> objectName =new ArrayList<>(); // 初始化
- E: обобщённый тип данных, используется для указания типа данных objectName,можно использовать только ссылочные типы данных。
- objectName: имя объекта.
ArrayList — это очередь на основе массива, которая предоставляет такие связанные функции, как добавление, удаление, изменение и обход.
Добавить элемент
Класс ArrayList предоставляет множество полезных методов. Вы можете использовать метод add() для добавления элементов в ArrayList:
Пример
public class ExampleTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Weibo");
System.out.println(sites);
}
}
Приведённый выше пример выполняется, и результат вывода:
[Google, Example, Taobao, Weibo]
Доступ к элементу
Чтобы получить доступ к элементу в ArrayList, можно использовать метод get():
Пример
public class ExampleTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Weibo");
System.out.println(sites.get(1)); // Доступ ко второму элементу
}
}
Примечание: значение индекса массива начинается с 0.
Приведённый выше пример выполняется, и результат вывода:
Example
Изменение элемента
Чтобы изменить элемент в ArrayList, можно использовать метод set(). Первый параметр метода set(int index, E element) — это индекс, указывающий позицию элемента, который нужно заменить; второй параметр — новый элемент, указывающий новое значение, которое нужно установить:
Пример
public class ExampleTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Weibo");
sites.set(2, "Wiki"); // Первый параметр — позиция индекса, второй — значение для изменения
System.out.println(sites);
}
}
Приведённый выше пример выполняется, и результат вывода:
[Google, Example, Wiki, Weibo]
Удаление элемента
Чтобы удалить элемент в ArrayList, можно использовать метод remove():
Пример
public class ExampleTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Weibo");
sites.remove(3); // Удалить четвёртый элемент
System.out.println(sites);
}
}
Приведённый выше пример выполняется, и результат вывода:
[Google, Example, Taobao]
Вычисление размера
Чтобы вычислить количество элементов в ArrayList, можно использовать метод size():
Пример
public class ExampleTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Weibo");
System.out.println(sites.size());
}
}
Приведённый выше пример выполняется, и результат вывода:
4
Итерация по ArrayList
Мы можем использовать for для перебора элементов в списке ArrayList:
Пример
public class ExampleTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Weibo");
for (int i = 0; i < sites.size(); i++) {
System.out.println(sites.get(i));
}
}
}
Приведённый выше пример выполняется, и результат вывода:
Google Example Taobao Weibo
Вы также можете использовать for-each для перебора элементов:
Пример
public class ExampleTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Example");
sites.add("Taobao");
sites.add("Weibo");
for (String i : sites) {
System.out.println(i);
}
}
}
Приведённый выше пример выполняется, и результат вывода:
Google Example Taobao Weibo
Другие ссылочные типы
Элементы в ArrayList на самом деле являются объектами. В приведённых выше примерах все элементы ArrayList имеют тип String.
Если мы хотим хранить другие типы, а <E> может быть только ссылочным типом данных, то нам нужно использовать классы-обёртки базовых типов.
Таблица классов-обёрток, соответствующих базовым типам, выглядит следующим образом:
| Базовый тип | Ссылочный тип |
|---|---|
| логическое значение | Boolean |
| байт | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Символ |
Кроме того, BigInteger и BigDecimal используются для высокоточных вычислений. BigInteger поддерживает целые числа произвольной точности. Они также являются ссылочными типами, но не имеют соответствующих базовых типов.
ArrayList<Integer> li=new ArrayList<>(); // 存放整数元素 ArrayList<Character> li=new ArrayList<>(); // 存放字符元素
В следующем примере ArrayList используется для хранения чисел (с использованием типа Integer):
Пример
public class ExampleTest {
public static void main(String[] args) {
ArrayList<Integer> myNumbers = new ArrayList<Integer>();
myNumbers.add(10);
myNumbers.add(15);
myNumbers.add(20);
myNumbers.add(25);
for (int i : myNumbers) {
System.out.println(i);
}
}
}
Приведённый выше пример выполняется, и результат вывода:
10 15 20 25
Сортировка ArrayList
Класс Collections также является очень полезным классом, расположенным в пакете java.util. Его метод sort() может сортировать списки символов или чисел.
Следующий пример сортирует буквы:
Пример
import java.util.Collections; // Импорт класса Collections
public class ExampleTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Taobao");
sites.add("Wiki");
sites.add("Example");
sites.add("Weibo");
sites.add("Google");
Collections.sort(sites); // Сортировка букв
for (String i : sites) {
System.out.println(i);
}
}
}
Приведённый выше пример выполняется, и результат вывода:
Google Example Taobao Weibo Wiki
Следующий пример сортирует числа:
Пример
import java.util.Collections; // Импорт класса Collections
public class ExampleTest {
public static void main(String[] args) {
ArrayList<Integer> myNumbers = new ArrayList<Integer>();
myNumbers.add(33);
myNumbers.add(15);
myNumbers.add(20);
myNumbers.add(34);
myNumbers.add(8);
myNumbers.add(12);
Collections.sort(myNumbers); // Сортировка чисел
for (int i : myNumbers) {
System.out.println(i);
}
}
}
Приведённый выше пример выполняется, и результат вывода:
8 12 15 20 33 34
Методы Java ArrayList
Ниже приведён список часто используемых методов Java ArrayList:
| Метод | Описание |
|---|---|
| add() | Вставляет элемент в arraylist в указанную позицию |
| addAll() | Добавляет все элементы из коллекции в arraylist |
| clear() | Удаляет все элементы из arraylist |
| clone() | Скопировать arraylist |
| contains() | Определить, присутствует ли элемент в arraylist |
| get() | Получить элемент в arraylist по значению индекса |
| indexOf() | Вернуть значение индекса элемента в arraylist |
| removeAll() | Удалить все элементы в arraylist, которые присутствуют в указанной коллекции |
| remove() | Удалить один элемент из arraylist |
| size() | Вернуть количество элементов в arraylist |
| isEmpty() | Определить, пуст ли arraylist |
| subList() | Извлечь часть элементов arraylist |
| set() | Заменить элемент по указанному индексу в arraylist |
| sort() | Отсортировать элементы arraylist |
| toArray() | Преобразовать arraylist в массив |
| toString() | Преобразовать arraylist в строку |
| ensureCapacity() | Установить для arraylist указанную ёмкость |
| lastIndexOf() | Возвращает позицию последнего вхождения указанного элемента в arraylist |
| retainAll() | Оставить в arraylist те элементы, которые также присутствуют в указанной коллекции |
| containsAll() | Проверить, содержит ли arraylist все элементы указанной коллекции |
| trimToSize() | Привести ёмкость arraylist в соответствие с количеством элементов в массиве |
| removeRange() | Удалить элементы между указанными индексами в arraylist |
| replaceAll() | Заменить каждый элемент в массиве заданным содержимым операции |
| removeIf() | Удалить все элементы arraylist, удовлетворяющие определённым условиям |
| forEach() | Перебрать каждый элемент в arraylist и выполнить определённую операцию |
Дополнительные методы API можно посмотреть здесь:https://www.example.com/manual/jdk11api/java.base/java/util/ArrayList.html
Другие расширения
Java Collections Framework