Теперь, когда мы работали с массивами, давайте познакомимся со списками (ArrayLists). Списки (ArrayLists) являются частью Фреймворка коллекций Java (Java Collections Framework) и предоставляют более гибкий способ работы со списками объектов. В отличие от массивов, списки (ArrayLists) могут динамически увеличивать или уменьшать свой размер.
-
Откройте файл ArrayListDemo.java в директории вашего проекта.
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
// We'll add our code here
}
}
Обратите внимание на оператор import вверху. Он сообщает Java, что мы хотим использовать класс ArrayList в нашей программе.
-
Теперь создадим список (ArrayList) строк. Добавьте следующую строку внутри метода main:
ArrayList<String> fruits = new ArrayList<>();
Это создаёт пустой список (ArrayList), который может хранить объекты типа String. Часть <String> называется "обобщением" (generic) и указывает тип элементов, которые будет содержать список (ArrayList).
-
Добавим несколько элементов в наш список (ArrayList). Добавьте следующие строки:
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
Метод add() добавляет элементы в конец списка.
-
Теперь выведем наш список (ArrayList) на экран. Добавьте следующий код:
System.out.println("Fruits in the list:");
for (String fruit : fruits) {
System.out.println(fruit);
}
Здесь используется расширенный цикл for для перебора элементов списка (ArrayList), аналогично тому, как мы делали с массивами.
Совет: Вы можете скомпилировать и запустить свою программу в любое время, чтобы увидеть вывод. Или вы можете продолжить добавлять больше кода и запустить его все в конце.
-
Списки (ArrayLists) имеют много полезных методов. Попробуем несколько из них. Добавьте следующий код:
System.out.println("\nNumber of fruits: " + fruits.size());
System.out.println("The second fruit is: " + fruits.get(1));
Метод size() возвращает количество элементов в списке (ArrayList), а метод get(index) извлекает элемент по указанному индексу.
-
Мы также можем заменить элементы в списке (ArrayList) с помощью метода set(). Добавьте следующий код:
// Before: [Apple, Banana, Cherry]
fruits.set(1, "Blueberry"); // Replaces "Banana" with "Blueberry"
System.out.println("\nAfter replacing the second fruit:");
System.out.println(fruits); // [Apple, Blueberry, Cherry]
Метод set(index, element) заменяет элемент по указанному индексу новым элементом. Размер списка (ArrayList) остаётся прежним.
-
В отличие от массивов, списки (ArrayLists) позволяют вставлять элементы в любую позицию с помощью метода add(index, element). Это отличается от метода set(), который мы рассмотрели ранее. Давайте посмотрим, как работает метод add():
// Before: [Apple, Blueberry, Cherry]
fruits.add(1, "Blackberry");
System.out.println("\nAfter inserting Blackberry at index 1:");
System.out.println(fruits);
// After: [Apple, Blackberry, Blueberry, Cherry]
Давайте разберем, что произошло:
add(1, "Blackberry") вставляет "Blackberry" по индексу 1
- Существующие элементы с индексом 1 и далее (Blueberry, Cherry) автоматически сдвигаются на одну позицию вправо
- Размер списка (ArrayList) увеличивается на 1
- Это отличается от метода
set(), который заменяет существующий элемент без сдвига и изменения размера
Чтобы лучше понять разницу:
// Using add(index, element) - inserts and shifts
fruits.add(1, "Blackberry"); // [Apple, Blackberry, Blueberry, Cherry]
// Using set(index, element) - replaces without shifting
fruits.set(1, "Blackberry"); // [Apple, Blackberry, Cherry]
-
Мы также можем удалять элементы из списка (ArrayList). Добавьте следующий код:
fruits.remove("Cherry");
System.out.println("\nAfter removing Cherry:");
System.out.println(fruits);
Это удаляет первое вхождение "Cherry" из списка (ArrayList). Когда элемент удаляется, все последующие элементы сдвигаются влево, чтобы заполнить образовавшуюся дыру.
-
Наконец, проверим, содержатся ли определенные элементы в нашем списке (ArrayList):
System.out.println("\nDoes the list contain Apple? " + fruits.contains("Apple"));
System.out.println("Does the list contain Cherry? " + fruits.contains("Cherry"));
Метод contains() проверяет, содержит ли список (ArrayList) определенный элемент, и возвращает логическое значение.
-
Сохраните файл, затем скомпилируйте и запустите программу:
javac ~/project/ArrayListDemo.java
java -cp ~/project ArrayListDemo
Вы должны увидеть вывод, похожий на следующий:
Fruits in the list:
Apple
Banana
Cherry
Number of fruits: 3
The second fruit is: Banana
After replacing the second fruit:
[Apple, Blueberry, Cherry]
After inserting Blackberry at index 1:
[Apple, Blackberry, Blueberry, Cherry]
After removing Cherry:
[Apple, Blackberry, Blueberry]
Does the list contain Apple? true
Does the list contain Cherry? false
Поздравляем! Теперь вы создали список (ArrayList), добавили и удалили элементы, получили доступ к элементам по индексу и использовали различные методы списка (ArrayList). Вы узнали важные различия между операциями, такими как add(), который вставляет и сдвигает элементы, и set(), который заменяет элементы. Списки (ArrayLists) предоставляют больше гибкости, чем массивы, так как они могут увеличиваться и уменьшаться по мере необходимости. Это делает их очень полезными, когда вы заранее не знаете, с каким количеством элементов будете работать.