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]