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);
相关推荐
小锋java123412 分钟前
【技术专题】LangChain4j 开发Java Agent智能体 - 嵌入模型与向量数据库
java·人工智能
程序员皮皮林18 分钟前
Dubbo 的 SPI 和 JDK 的 SPI 有什么区别?
java·开发语言·dubbo
小锋java123418 分钟前
10分钟学会Java16新特性record
java
是多巴胺不是尼古丁21 分钟前
java‘期末复习--多态
java·开发语言
瑞雪兆丰年兮24 分钟前
[从0开始学Java|第二十五天]项目阶段(综合练习&斗地主小游戏)
java·windows
Demon1_Coder41 分钟前
Day4-微服务-Seata默认事务
java·数据库·微服务
Sunia1 小时前
《AgentX 专栏》08-工作流引擎:AgentWorkflow怎么把工具记忆流程串成一条流水线
java·架构
huipeng9261 小时前
企业级微服务开发实战(二):微服务基础设施搭建与中间件部署
java·redis·mysql·spring cloud·微服务·nacos·rabbitmq
Jabes.yang1 小时前
Java电商订单系统面试全流程解析:接口设计、数据库、微服务与分布式事务实战
java·微服务·mybatis·分布式事务·电商·订单系统·接口设计
码语智行1 小时前
导入模板下载
java