Java преобразование ArrayList в Array

🔥 🚀 Важно для всех, кто работает с 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».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх