🔥 🚀 Важно для всех, кто работает с Java! 🔥
На JavaRocks ты найдешь уникальные туториалы, практические задачи и редкие книги, которых не найти в свободном доступе. Присоединяйся к нашему Telegram-каналу JavaRocks — стань частью профессионального сообщества!
Привет! В сегодняшнем уроке мы поговорим о том, как инициализировать массив в Java и как преобразовать массив Array
в Arraylist
.
Массивы являются расширением класса Container
в Java и могут быть полезны как способ временного хранения набора примитивных типов данных. Массивы являются статическими при создании, что означает, что когда вы создаете массив, вы не можете изменить количество содержащихся в нем элементов. Инициализировать массив в Java выглядит так:
datatype[] isArray;
Run CodeГде datatype
— это любой примитивный тип данных, такой как int, float, long или даже String.
Вы также можете разместить скобки после объявления, например:
datatype isArray[];
Run CodeТак как же нам взять этот статический массив с заданным количеством элементов и преобразовать его в ArrayList? Ну, для начала давайте разберемся, что такое ArrayList.
ArrayList
ArrayList
может иметь похожее имя на Array
, но обрабатывается он совершенно по-другому. Это потому, что ArrayList
не расширяет класс Container
, он расширяет класс List
.
Во-первых, поскольку он является расширением класса List, вы можете увеличить или уменьшить размер ArrayList с помощью add(element)
, который помещает элемент в конец List и увеличивает размер на единицу, если это необходимо. Или вы можете использовать trimToSize()
, который удаляет все пустые индексы в конце и обрезает ArrayList
до его текущего размера.
Итак, вы можете видеть, что есть несколько преимуществ использования ArrayList вместо простого массива. Далее мы покажем вам два метода преобразования из Array в ArrayList и наоборот.
Переход от Array к ArrayList и обратно.
Итак, предположим, что вы написали программу для ведения инвентаризации того, сколько гаек и болтов есть в наличии у вашей компании для ремонта кошачьих домиков. Прикольный англоязычный пример, но всё понятно.)))))
В течение многих лет вам требовалось всего 30 различных типов, поэтому было легко просто использовать массив для учета. Но теперь у вас появился новый клиент, который требует, чтобы вы запаслись дополнительными 5 типами. Как вы можете изменить свою программу и сохранить все свои данные, И избавить себя от необходимости делать это снова, когда вы заберете другого клиента? Правильно! ArrayList! Так как же преобразовать массив Java в ArrayList? Есть три метода. Использование метода .asList()
У массивов Java есть отличный инструмент, который вы можете увидеть, взглянув на API, который называется .asList()
. Поэтому вы можете просто написать это:
boltInventory.asList(bolts);
Run CodeПроблема с этим методом в том, что он не создает настоящий ArrayList. Он создает List, который имеет фиксированный размер и не может быть изменен. Поэтому вы по-прежнему не можете изменить размер динамическим способом. Попытка добавить или удалить элементы вызовет исключение. Поэтому, хотя это и имеет свои применения, это не настоящее преобразование. Но мы можем это использовать. Использование .asList(
) в качестве аргумента Это второй способ преобразования массива в список в Java. Поскольку метод .asList()
создает List, мы можем использовать его для передачи ссылки на наш фактический ArrayList. Вот как инициализировать ArrayList:
ArrayList<Integer> boltsInventory = new ArrayList<Integer>();
Run CodeЭто создаст ArrayList с десятью пустыми ячейками. Однако ()
в конце можно использовать для передачи аргумента для заполнения ArrayList. Таким образом, в сочетании с методом .asList
вы получите:
ArrayList<Integer> boltsInventory = new ArrayList<Integer>(Arrays.asList(bolts));
Run CodeЭто передает список, созданный методом .asList()
, в ArrayList, так что теперь вы можете динамически манипулировать им по мере необходимости. Использование метода Collections.addAll()
Другой способ преобразования массива в ArrayList в Java — использовать этот метод. Он передает содержимое массива в ArrayList. Общий синтаксис этого метода:
Collections.addAll(c, T);
Run CodeГде c
— это пункт назначения, а T
— то, что передается. Так что для нашего примера синтаксис будет выглядеть так:
ArrayList<Integer> boltsInventory = new ArrayList<Integer>():
Collections.addAll(boltsInventory, bolts);
Run CodeЭто передаст все содержимое Array bolts в новый ArrayList. Преобразование ArrayList в массив Может возникнуть ситуация, когда вам понадобится преобразовать ArrayList в массив в Java. Если вы это сделаете, ArrayList имеет метод .toArray(a)
, где a — это место назначения. Так что для нашего примера синтаксис будет следующим:
Integer boltsInventoryArray[] = new Integer{boltsInventory.size()];
boltsInventoryArray = boltsInventory.toArray(boltsInventoryArray);
Run CodeКогда вы изменяете список на массив в Java таким образом, вы создаете глубокую копию. То есть все ссылки на Array отличаются от ссылок на ArrayList. Таким образом, вы можете манипулировать данными в Array, не изменяя данные, хранящиеся в ArrayList. Полезно преобразовать список Java в массив, когда вам нужно протестировать данные.
Итак, вы узнали, как инициализировать массивы и преобразовывать их в ArrayLists в Java. Отличная работа! Но подождите, есть еще одна важная часть головоломки, которую вам нужно знать: toArray(T[])
метод. Этот метод необходим для безопасного преобразования ArrayList
обратно в типизированный массив. Давайте разберем его шаг за шагом!
Что такое toArray(T[]) и зачем его использовать?
Класс Java ArrayList
предоставляет два toArray()
метода:
Object[] toArray()
T[] toArray(T[] a)
Подождите, два метода? Ага! И вот почему второй, toArray(T[])
, супер важен:
Тип безопасности
Базовый toArray()
метод возвращает Object[]
, то есть вам придется вручную привести его обратно к нужному типу. Упс! Это может привести к ClassCastException
. toArray(T[])
Метод, с другой стороны, обеспечивает безопасность, возвращая правильно типизированный массив. Не нужно рискованного приведения!
Практические примеры использования toArray(T[])
Давайте посмотрим, как это работает на практике. Готовы к практическим действиям? Поехали!
Пример 1: Преобразование ArrayList в типизированный массив
import java.util.ArrayList;
import java.util.List;
public class ToArrayExample {
public static void main(String[] args) {
List fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
String[] fruitArray = fruits.toArray(new String[0]);
for (String fruit : fruitArray) {
System.out.println(fruit);
}
}
}
Run CodeВыход:
Apple
Banana
Cherry
Run CodeЛегко и просто! Заметили, что нам не пришлось ничего приводить? Вот это безопасность типов в действии!
Пример 2: использование toArray(T[])
с целыми числами
import java.util.ArrayList;
import java.util.List;
public class IntegerArrayExample {
public static void main(String[] args) {
List numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
Integer[] numberArray = numbers.toArray(new Integer[0]);
for (Integer num : numberArray) {
System.out.println(num);
}
}
}
Run CodeВыход:
1
2
3
Run CodeТа же идея, только с числами! Видите, насколько универсален этот метод?
Сравнение toArray() и toArray(T[])
Все еще задаетесь вопросом, почему мы просто не используем базовый toArray()
? Давайте сравним два варианта.
Пример: использование toArray()
List items = new ArrayList<>();
items.add("Pen");
items.add("Notebook");
Object[] objectArray = items.toArray();
for (Object obj : objectArray) {
String item = (String) obj;
System.out.println(item);
}
Run CodeОпаньки! Такое ручное приведение рискованно. Неправильное приведение может вызвать исключение ClassCastException
.
Пример: использование toArray(T[])
String[] stringArray = items.toArray(new String[0]);
for (String item : stringArray) {
System.out.println(item);
}
Run CodeНамного лучше, правда? Не нужно приведение типов, и ваша IDE даже может помочь с автодополнением!
Таблица быстрого сравнения
Метод | Тип возврата | Тип безопасности | Вариант использования |
---|---|---|---|
toArray() | Object[] | Нет (требуется кастинг) | Быстрые преобразования, когда безопасность типов не имеет значения |
toArray(T[]) | T[] | Да (кастинг не требуется) | Безопасные по типу преобразования в определенный тип массива |
Заключение
Массивы очень полезны для быстрого доступа и быстрой обработки небольших наборов данных, но невозможность изменить их размер означает, что они быстро теряют эффективность при долгосрочном использовании. ArrayList дает вам эту гибкость и возможность вставлять и удалять узлы по мере необходимости. Изучение того, как преобразовать массив Java в список, улучшит общую эффективность ваших программ, а также улучшит их время выполнения.
Перевод статьи «ArrayList to Array Conversion in Java».