Рубрики
Без рубрики

Java ArrayList в массив

Java ArrayList toArray, ArrayList для массива Java, пример метода Java ArrayList toArray, Мелкая копия против глубокой копии, пример кода Java Stream toArray.

Автор оригинала: Pankaj Kumar.

Иногда нам приходится преобразовывать ArrayList в массив в java-программе. Сегодня мы рассмотрим различные варианты преобразования java ArrayList в массив.

Java ArrayList в массив

ArrayList в Java поддерживается массивом. Поэтому неудивительно, что ArrayList предоставляет служебные методы для преобразования ArrayList в массив. Давайте рассмотрим простую программу, показывающую, как преобразовать ArrayList в массив на java.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayListToArray {

	public static void main(String[] args) {
		List strList = new ArrayList();
		strList.add("1");
		strList.add("2");
		strList.add("3");

		String[] strArr = null;

		strArr = strList.toArray(new String[strList.size()]);
		System.out.println(Arrays.toString(strArr));
	}
}

Если вы посмотрите на методы ArrayList, то toArray метод перегружен. Другой – без какого-либо аргумента, возвращающего массив объектов. Однако это не рекомендуется, потому что тогда вам придется привести объект к правильному типу для любых операций.

ArrayList для массива в Java – другие способы

При передаче массива в качестве аргумента в методе toArray нам не нужно указывать точный размер массива. Приведенный ниже код тоже отлично работает.

strArr = strList.toArray(new String[0]);
System.out.println(Arrays.toString(strArr));

Если вы используете Java 8 или выше, вы также можете использовать Stream для преобразования списка массивов в массив.

strArr = strList.stream().toArray(String[]::new);
System.out.println(Arrays.toString(strArr));

Java ArrayList в массив – Неглубокая копия

Когда мы преобразуем ArrayList в массив с помощью описанных выше методов, он возвращает неглубокую копию элементов в списке . Таким образом, любое изменение в ArrayList или массиве будет отражено и в другом. Ниже приведена простая программа, показывающая такое поведение.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayListToArrayMutableObjects {

	public static void main(String[] args) {
		Person p1 = new Person("Pankaj");
		Person p2 = new Person("Lisa");
		
		List pList = new ArrayList<>();
		pList.add(p1); pList.add(p2);
		
		Person[] pArray = pList.toArray(new Person[0]);
		
		System.out.println("Original List = "+pList);
		System.out.println("Created Array from ArrayList = "+Arrays.toString(pArray));
		
		//let's change the list and array
		pList.get(0).setName("David");
		pArray[1].setName("Ram");
		
		System.out.println("Modified List = "+pList);
		System.out.println("Modified Array = "+Arrays.toString(pArray));
		
	}

}

class Person {
	private String name;

	public Person(String n) {
		this.name = n;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return this.name;
	}
}

Когда мы запускаем вышеописанную программу java, она возвращает следующий вывод.

Original List = [Pankaj, Lisa]
Created Array from ArrayList = [Pankaj, Lisa]
Modified List = [David, Ram]
Modified Array = [David, Ram]

Как вы можете видеть, мы изменили первый элемент ArrayList и второй элемент массива. Однако изменения отражаются как в ArrayList, так и в массиве, и в конце у обоих есть одни и те же объекты.

Java ArrayList для глубокой копии массива

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

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayListToArrayDeepCopy {

	public static void main(String[] args) {
		Person p1 = new Person("Pankaj");
		Person p2 = new Person("Lisa");
		
		List pList = new ArrayList<>();
		pList.add(p1); pList.add(p2);

		//convert ArrayList to Array using deep copy
		Person[] pArray = new Person[pList.size()];
		
		for(int i =0; i
Original List = [Pankaj, Lisa]
Created Array from ArrayList = [Pankaj, Lisa]
Modified List = [David, Lisa]
Modified Array = [Pankaj, Ram]

Это все для преобразования java ArrayList в массив с использованием разных методов.

Ссылка: Java ArrayList toArray API Doc