Java ArrayList到数组

时间:2020-02-23 14:36:22  来源:igfitidea点击:

有时我们必须在Java程序中将ArrayList转换为Array。
今天,我们将研究不同的java ArrayList到Array的转换选项。

Java ArrayList到数组

Java中的ArrayList由Array支持。
因此,毫不奇怪,ArrayList提供了实用程序方法来将ArrayList转换为Array。
让我们看一个简单的程序,该程序显示如何将ArrayList转换为Java中的数组。

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

public class ArrayListToArray {

	public static void main(String[] args) {
		List<String> strList = new ArrayList<String>();
		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方法将被重载。
另一个没有任何返回Object数组的参数。
但是,不建议这样做,因为这样一来,您就必须将对象强制转换为适当的类型以进行任何操作。

用Java将ArrayList转换为Array的其他方式

在将数组作为参数传递给" toArray"方法时,我们不需要为数组提供确切的大小。
下面的代码也可以正常工作。

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

如果使用的是Java 8或者更高版本,则也可以使用Stream将ArrayList转换为Array。

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

Java ArrayList到阵列–浅拷贝

当我们使用上述方法将ArrayList转换为Array时,它将返回列表中元素的浅表副本。
因此,ArrayList或者Array中的任何更改也将反映在其他列表中。
下面是一个显示此行为的简单程序。

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("hyman");
		Person p2 = new Person("Lisa");
		
		List<Person> 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 = [hyman, Lisa]
Created Array from ArrayList = [hyman, Lisa]
Modified List = [David, Ram]
Modified Array = [David, Ram]

如您所见,我们更改了ArrayList的第一个元素和Array的第二个元素。
但是,更改会同时反映在ArrayList和Array中,并且最后都具有相同的对象。

Java ArrayList到阵列–深度复制

因此,如果您想将ArrayList转换为Array并希望将它们分离,那么您将必须进行深层复制并自己编写代码。
下面是一个重构代码,显示了如何执行深度复制以将ArrayList转换为Array。

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("hyman");
		Person p2 = new Person("Lisa");
		
		List<Person> 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<pList.size(); i++) {
			Person p = pList.get(i);
			Person temp = new Person(p.getName());
			pArray[i] = temp;
		}
		
		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));

	}

}

以下是上述应用程序产生的输出。

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