List和数组互转方法以及踩坑点

本文介绍了如何在Java中使用for循环和Arrays.asList()方法将数组转换为List,以及List转换为数组的不同方式,包括toArray(),stream().toArray()和mapToInt()。特别提到了Arrays.asList()的局限性以及如何处理List的增删操作。
摘要由CSDN通过智能技术生成

一、数组转List

1. 使用for循环逐个添加

String[] arr = {"A", "B", "C"};
List<String> list = new ArrayList<>();
for (String element : arr) {
    list.add(element);
}

2. 使用Arrays.asList(arr)

String[] arr = {"A", "B", "C"};
List<String> list = Arrays.asList(arr);
//list.add("D");//UnsupportedOperationException
//list.remove("A");//UnsupportedOperationException

注意:Arrays.asList()返回的是一个Arrays中的内部类ArrayList对象(不是我们平时使用的那个),这个list没有重写实现添加和删除方法,其大小是固定不变的,当调用它的add和remove方法时,会默认抛出UnsupportedOperationException异常。

如需对转出的list进行增删操作,可进一步构造:

List<String> list = new ArrayList<>(Arrays.asList(arr));

二、List转数组

1. list.toArray(T[] a)

List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));

Object[] objects = list.toArray();//toArray()返回的是Object数组
String[] array = list.toArray(new String[0]);//传入一个大小为0的String数组来指定返回值类型

toArray()方法返回的是Object数组,可使用list.toArray(T[] a)传入一个指定类型的数组,获得的结果数据即为指定类型的数组。

ArrayList中toArray(T[] a)方法的源码如下,

  • 当传入的数组容量小于list的大小时,会直接将列表元素copy到一个新数组,传入的数组仅用来指定新数组类型。
  • 当传入的数组容量大于等于list的大小时,则直接将列表元素拷贝到这个数组并将其返回。
    在这里插入图片描述

2. list.stream().toArray(T[] :: new)

将list转换为stream流,再转换为数组

String[] arr = list.stream().toArray(String[]::new);

通常是在需要对list的元素做中间处理后再转换为数组时,才用这个方法,如下

//给每个元素再加上一个字符串再转为数组
 String[] arr1 = list.stream().map(s -> s+"str").toArray(String[]::new);

3. list转int数组

使用mapToInt

List<Integer> intList = new ArrayList<>();
int[] ints = intList.stream().mapToInt(Integer::intValue).toArray();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值