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]

