Java ArrayList到数组

本文详细介绍了如何在Java中将ArrayList转换为Array,包括使用toArray()方法的不同方式,以及浅拷贝和深拷贝的概念。通过示例代码展示了ArrayList和Array之间的转换,以及更改其中一个时对另一个的影响。
摘要由CSDN通过智能技术生成

Sometimes we have to convert ArrayList to Array in java program. Today we will look into different java ArrayList to Array conversion options.

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

Java ArrayList到数组 (Java ArrayList to Array)

ArrayList in Java is backed by Array. So it’s no wonder, ArrayList provides utility methods to convert ArrayList to Array. Let’s look at a simple program showing how to convert ArrayList to an array in java.

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));
	}
}

If you will look into ArrayList methods, toArray method is overloaded. The other one is without any argument that returns Object array. However, it’s not recommended because then you will have to cast the object to proper type for any operations.

如果您要研究ArrayList方法,则toArray方法已重载。 另一个没有任何返回Object数组的参数。 但是,不建议这样做,因为这样一来,您必须将对象强制转换为任何操作的正确类型。

用Java将ArrayList转换为Array的其他方式 (ArrayList to Array in Java – other ways)

While passing the array as argument in toArray method, we don’t need to provide the array with exact size. Below code works fine too.

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

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

If you are using Java 8 or higher, you can use Stream too for converting ArrayList to Array.

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

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

Java ArrayList到阵列–浅拷贝 (Java ArrayList to Array – Shallow Copy)

When we convert ArrayList to Array using above methods, it returns a shallow copy of the elements in the list. So any change in either ArrayList or Array will be reflected in other one too. Below is a simple program showing this behavior.

当我们使用上述方法将ArrayList转换为Array时,它将返回list中元素的浅表副本。 因此,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("Pankaj");
		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;
	}
}

When we run above java program, it returns the following output.

当我们在上述Java程序上运行时,它将返回以下输出。

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

As you can see that we changed the first element of ArrayList and second element of the Array. However, change is reflected in both ArrayList and Array and at the end, both have the same objects.

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

Java ArrayList到阵列–深度复制 (Java ArrayList to Array – Deep Copy)

So if you want to convert ArrayList to Array and want them to be detached, then you will have to do a deep copy and write code for yourself. Below is a refactored code showing how to perform deep copy for converting ArrayList to Array.

因此,如果您想将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("Pankaj");
		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));

	}

}

Below is the output produced by the above application.

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

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

That’s all for java ArrayList to Array conversion using different methods.

这就是使用不同方法将java ArrayList转换为Array的全部。

Reference: Java ArrayList toArray API Doc

参考: Java ArrayList toArray API文档

翻译自: https://www.journaldev.com/760/java-arraylist-to-array

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值