Статьи

Использование Java ArrayLists

ArrayList  в Java является одним из наиболее часто используемых классов в JDK. Это реализация массива с изменяемым размером с рядом полезных методов для манипулирования массивом. В этой статье мы представляем некоторые шаблоны использования ArrayList .

ArrayList является конкретной реализацией списка  интерфейса. Таким образом, можно ссылаться на List вместо ArrayList, когда детали реализации не имеют значения. Приведенные ниже примеры используют List вместо ArrayList, когда это различие не имеет значения.

Array vs. ArrayList

Обычный массив в Java — это контейнер, который содержит фиксированное количество элементов определенного типа. Следующее ( stringArray) является объявлением массива объектов String и инициализируется в массив, достаточный для хранения 20 строк.

String[] stringArray = new String[20];

ArrayList для хранения строк определяется , как показано ниже. Число 20 указывает классу ArrayList, чтобы зарезервировать достаточно места для 20 строк.

ArrayList<String> stringList = new ArrayList<String>(20);

Некоторые из различий между ними:

  • Дополнение:stringArray  может хранить до 20 строк. Если вам нужно сохранить больше позже, вам придется повторно инициализировать массив и скопировать содержимое из старого массива. С ArrayList вы можете добавить более 20 строк, не беспокоясь о емкости.
  • Удаление: с помощью ArrayList легко удалить записи либо по определенному индексу, либо по диапазону, либо по определенному объекту. Не так просто с массивом. Вам понадобятся циклы и другой код, чтобы управлять удалением в вашем коде.

Создание ArrayList

Как уже было показано выше, вы можете создать ArrayList с помощью конструктора. Чтобы создать пустой ArrayList вместимостью 10 объектов:

ArrayList<Object> objArray = new ArrayList<>();

Чтобы создать ArrayList из другой Коллекции,  такой как Набор  или Список , вы можете использовать:

Set<String> stringSet = ..;
List<String> list = new ArrayList<String>(stringSet);

Что если вам нужно создать список из набора объектов, уже лежащих в вашем коде? Вы можете использовать Arrays.asList () следующим образом:

List<String> list = Arrays.asList("Apple", "Banana", "Orange");

Далее выбираются строки из текстового файла с использованием потоков Java 8.

List<String> lines = Files
    .lines(Paths.get(textFile))
    .filter(x -> x.length() > 50)
    .collect(Collectors.toList());

Конвертировать массив в ArrayList

Как показано выше, преобразовать в список просто, если у вас есть простой массив объектов.

List<String> a = Arrays.asList(args);

Вышесказанное подходит, если у вас есть массив объектов. Что если у вас есть массив примитивного типа, скажем, int? Вот как вы можете справиться с этим делом.

int[] array = { 2, 4, 5 };
List<Integer> list = Arrays
    .stream(array)
    .boxed()
    .collect(Collectors.toList());

Конвертировать ArrayList в Array

Интерфейс List предоставляет метод toArray (), который создает и возвращает новый массив, содержащий все элементы в ArrayList .

List<String> strList = ...;
String[] strArray = strList.toArray();

Добавить в ArrayList

Используйте метод add () для добавления элементов в список . Этот вызов добавляет элементы в конец списка.

List<String> strList = new ArrayList<>();
strList.add("Apple");
strList.add("Banana");
strList.add("Orange");
strList.stream().forEach(System.out::println);

// prints
Apple
Banana
Orange

Чтобы добавить все элементы коллекции, используйте addAll () .

List<String> modList = new ArrayList<>();
modList.addAll(strList);
modList.add("Melon");

UnsupportedOperationException

Следующий код приводит к  исключению UnsupportedOperationException . Причина в том, что  Arrays.asList () возвращает список фиксированного размера, поддерживаемый входным массивом. Таким образом, вы не можете добавлять элементы в список, возвращаемый Arrays.asList () .

Простое решение — создать новый ArrayList из исходного списка следующим образом:

List<String> strList = Arrays.asList("Apple", "Banana", "Orange");
List<String> modList = new ArrayList<>(strList);
modList.add("Melon");

Или вы можете использовать потоки Java 8:

List<String> modList = strList
    .stream()
    .collect(Collectors.toList());
modList.add("Melon");
modList.stream().forEach(System.out::println);

// prints:
Apple
Banana
Orange
Melon

Удалить из ArrayList

Удаление элементов из списка также легко. Удалить элемент по определенному индексу.

List<String> modList = new ArrayList<>();
modList.addAll(strList);
modList.add("Melon");
modList.remove(2);

// contains:
Apple
Banana
Melon

Удалите определенный объект, как показано ниже. Примечание : метод equals () используется для проверки, удалять ли объект. Это работает, как показано для строки. Для другого класса equals () может быть определен в терминах адресов памяти, и в этом случае тот же экземпляр объекта должен быть передан для его удаления.

List<String> modList = new ArrayList<>();
modList.addAll(strList);
modList.add("Melon");
modList.remove("Orange");

// contains
Apple
Banana
Melon

Что делать, если вы хотите удалить объект с определенной характеристикой. Используйте метод removeIf () с предикатом. Методы удаляют все элементы, которые соответствуют предикату.

List<String> modList = new ArrayList<>();
modList.addAll(strList);
modList.add("Melon");
modList.removeIf(x -> x.endsWith("e"));

// contains
Banana
Melon

Удалите все объекты из одного списка , найденные в другом списке, используя removeAll () .

List<String> modList = new ArrayList<>();
modList.addAll(strList);
modList.add("Melon");
modList.removeAll(Arrays.asList("Banana", "Kiwi"));

// contains
Apple
Orange
Melon

Резюме

В этой статье объясняются массивы Java и ArrayList с точки зрения начинающего. Мы показали создание и инициализацию ArrayList. ArrayList предоставляет набор методов для добавления и удаления элементов из списка. В некоторых случаях созданный список может не изменяться, и в этом случае возникает исключение при попытке его изменить.