【Java】 ArrayList 与 数组之间的转换

本文详细介绍了如何在Java中将ArrayList转换为数组以及数组转换为List的方法,包括循环遍历方式和使用toArray()及asList()方法。示例代码清晰展示了各种转换操作,并提到了转换过程中的注意事项和最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发中不免碰到List与数组类型之间的相互转换,对此做出如下总结

一、ArrayList 转换为数组

方法一: 循环遍历

循环遍历,将 ArrayList 中的元素使用 get() 方法存入数组

package Packger;

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

public class Array_list {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list=new ArrayList(); 
	    list.add("a"); 
	    list.add("b"); 
	    list.add("c"); 
	    int size=list.size(); // 获取 ArrayList 中元素的个数
	    String[] array=new String[size]; 
	    for(int i=0;i<list.size();i++){ // 循环遍历将 ArrayList 中的数组存入数组
	      array[i]=(String)list.get(i); // Returns the element at the specified position in this list.
	    } 
	    for(int i=0;i<array.length;i++){ // 将数组循环遍历输出
	      System.out.println(array[i]); 
	    } 
	  } 
	}

正如上面所列举的,当要将ArrayList类型的数据转换为String[]的时候,必须对List类型进行遍历,其实没有这种必要,List提供给我们一个很好的方法解决List转换成为数组的问题,不防再看一个例子:

方法二:ArrayList 的 toArray() 方法(推荐)

ArrayList提供public T[] toArray(T[] a)方法返回一个按照正确的顺序包含此列表中所有元素的数组,返回数组的运行时类型就是指定数组的运行时类型。

package Packger;

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

public class Array_list_f {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	        List<String> list=new ArrayList<String>();  
	        list.add("a");  
	        list.add("b");  
	        list.add("c");  
	        int size=list.size();  
	        String[] array = (String[])list.toArray(new String[size]);  
	        for(int i=0;i<array.length;i++){  
	            System.out.println(array[i]);  
	        }  
	}  
}

或者:al.stream().mapToInt(k -> k).toArray();

al.stream().mapToInt(k -> k).toArray()
ArrayList<Integer> al = new ArrayList<>();
al.add(1);
al.add(3);
al.add(5);

int[] arr = al.stream().mapToInt(k->k).toArray();
for(int a:arr)
    System.out.print(a+" ");

二、数组转换为List

方法一:循环遍历

package Packger;

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

public class List_array {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String[] array=new String[3]; 
	    array[0]="a"; 
	    array[1]="b"; 
	    array[2]="c"; 
	    List<String> list=new ArrayList<String>(); 
	    for(int i=0;i<array.length;i++){ 
	      list.add(array[i]); 
	    } 
	    for(int i=0;i<list.size();i++){ 
	      System.out.println(list.get(i)); 
	    } 
	} 
}

方法二:Arrays 对象的 asList() 方法

其实数组转换成为List的问题,Arrays对象也提供给我们 public static List asList(T… a) 供我们调用

用法一:
package Packger;

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

public class List_array_f {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String[] array=new String[3];  
        array[0]="a";  
        array[1]="b";  
        array[2]="c";  
        List<String> list=Arrays.asList(array);  
        for(int i=0;i<list.size();i++){  
            System.out.println(list.get(i));  
        }  
    }  
}

asList方法返回一个受指定数组支持的固定大小的列表,此方法同 Collection.toArray 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。除此之外, 此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:

package Packger;

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

public class List_array_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> list = Arrays.asList("a","b","c"); 
	    for(int i=0;i<list.size();i++){ 
	      System.out.println(list.get(i)); 
	    } 
	} 
}
用法二:

这不是最好的,因为asList()返回的列表的大小是固定的。事实上,返回的列表不是java.util.ArrayList,而是定义在java.util.Arrays中一个私有静态类。我们知道ArrayList的实现本质上是一个数组,而asList()返回的列表是由原始数组支持的固定大小的列表。这种情况下,如果添加或删除列表中的元素,程序会抛出异常UnsupportedOperationException。

推荐:

ArrayList<Element> arrayList = new ArrayList<Element>(Arrays.asList(array));
package Packger;

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

public class List_array_3 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String[] array=new String[3];  
        array[0]="a";  
        array[1]="b";  
        array[2]="c";  
        ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(array));
        for(int i=0;i<arrayList.size();i++){  
            System.out.println(arrayList.get(i));  
        }
	}
}

ArrayList的构造方法

ArrayList(Collection < ? extends E > c) : 构造一个包含特定容器的元素的列表,并且根据容器迭代器的顺序返回。

所以构造方法所做的事情如下:
1.将容器c转换为一个数组
2.将数组拷贝到ArrayList中称为”elementData”的数组中
ArrayList的构造方法的源码如下:

public ArrayList(Collection<? extends E> c) {
       elementData = c.toArray();
       size = elementData.length;
       if (elementData.getClass() != Object[].class)
             elementData = Arrays.copyOf(elementData, size, Object[].class);
}

参考博客:

https://www.cnblogs.com/wxmdevelop/p/12905291.html

https://www.jb51.net/article/74817.htm

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何为xl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值