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

一、数组转List

1. 使用for循环逐个添加

java 复制代码
String[] array = {"A", "B", "C"};
List<String> list = new ArrayList<>();
for (String element : array) {
    list.add(element);
}

2. 使用Arrays.asList(arr)

java 复制代码
String[] array = {"A", "B", "C"};
List<String> list = Arrays.asList(array);
//list.add("D");//UnsupportedOperationException
//list.remove("A");//UnsupportedOperationException

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

二、List转数组

1. list.toArray(T[] a)

java 复制代码
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("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流,再转换为数组

java 复制代码
String[] arr = list.stream().toArray(String[]::new);

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

java 复制代码
//给每个元素再加上一个字符串再转为数组
 String[] arr1 = list.stream().map(s -> s+"str").toArray(String[]::new);
相关推荐
_BugMan15 分钟前
【IDEA】干活?一个IDEA即可,集成开发平台打造攻略
java·ide·intellij-idea
YA3331 小时前
java设计模式二、工厂
java·开发语言·设计模式
金色天际线-1 小时前
Nginx 优化与防盗链配置指南
java·后端·spring
我爱挣钱我也要早睡!2 小时前
Java 复习笔记
java·开发语言·笔记
AD钙奶-lalala4 小时前
Mac OS上搭建 http server
java
皮皮林5518 小时前
SpringBoot 全局/局部双模式 Gzip 压缩实战:14MB GeoJSON 秒变 3MB
java·spring boot
weixin_456904278 小时前
Spring Boot 用户管理系统
java·spring boot·后端
趁你还年轻_8 小时前
异步编程CompletionService
java
DKPT8 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
sibylyue8 小时前
Guava中常用的工具类
java·guava