当前位置: 首页 > news >正文

Arrays.asList和 List<String> list = new ArrayList<>();有什么区别

在 Java 中,Arrays.asList(...)new ArrayList<>(...) 都可以用来创建列表(List),但它们之间存在显著的区别。下面是对两者的主要区别进行的对比分析:


✅ 1. 可变性不同

特性Arrays.asList(...)new ArrayList<>(...)
是否可变❌ 不可变(大小不可变)✅ 可变
是否支持添加/删除元素❌ 抛出 UnsupportedOperationException✅ 支持

示例:

List<String> list1 = Arrays.asList("a", "b", "c");
list1.add("d"); // 报错:java.lang.UnsupportedOperationExceptionList<String> list2 = new ArrayList<>(Arrays.asList("a", "b", "c"));
list2.add("d"); // 成功

原因:

  • Arrays.asList(...) 返回的是一个固定大小的 List 实现类java.util.Arrays.ArrayList),不是 java.util.ArrayList
  • 它只是一个数组的封装视图,不能改变长度。

✅ 2. 底层实现不同

属性Arrays.asList(...)new ArrayList<>()
实现类java.util.Arrays.ArrayListjava.util.ArrayList
内部结构直接引用传入的数组内部新建数组并复制数据

示例:

String[] arr = {"a", "b"};
List<String> list1 = Arrays.asList(arr);
arr[0] = "c";
System.out.println(list1); // 输出 [c, b]List<String> list2 = new ArrayList<>(Arrays.asList("a", "b"));
arr[0] = "x";
System.out.println(list2); // 输出 [a, b]

✅ 3. null 元素处理

情况Arrays.asList(...)new ArrayList<>()
支持 null 吗?✅ 支持✅ 支持
null 数组传入❌ 抛出 NullPointerException❌ 抛出 NullPointerException

示例:

List<String> list1 = Arrays.asList(null, "a"); // OK
List<String> list2 = new ArrayList<>(Arrays.asList(null, "a")); // OKList<String> list3 = Arrays.asList((String[]) null); // NullPointerException

✅ 4. 性能与用途场景

场景推荐方式
仅做读取操作、性能敏感Arrays.asList(...)(轻量级封装)
需要频繁增删改new ArrayList<>()
转换为真正的可变 Listnew ArrayList<>(Arrays.asList(...))

✅ 5. 使用建议总结

使用目的推荐写法
快速构建只读列表Arrays.asList(...)
构建可变列表new ArrayList<>(...)
将数组转为可变列表new ArrayList<>(Arrays.asList(...))
多线程或频繁修改new ArrayList<>(...) 或其他并发容器

✅ 在你的代码中的使用

你当前的代码中:

cBean.setQueueCodeList(new ArrayList<>(cBean.getQueueCodeList()));

这是一个非常合理的做法,因为:

  • getQueueCodeList() 返回的可能是 Arrays.asList(...) 创建的不可变列表
  • 通过 new ArrayList<>(...) 包装后,确保后续 .add(...) 操作不会抛异常

✅ 总结对比表

特性Arrays.asList(...)new ArrayList<>()
类型固定大小可变大小
实现类java.util.Arrays.ArrayListjava.util.ArrayList
是否可增删❌ 不可✅ 可以
修改影响原数组?✅ 是的(浅拷贝)❌ 否
性能更高效(无复制)略慢(需要复制)
推荐用于只读操作增删改查操作

📌 小贴士:

如果你使用的是 Java 9+,还可以使用以下方式:

List<String> list = List.of("a", "b", "c"); // 不可变

或者:

List<String> list = new ArrayList<>(List.of("a", "b", "c")); // 可变

http://www.lryc.cn/news/574278.html

相关文章:

  • C++11的内容
  • 智能生成分析报告系统在危化安全生产监测预警评估中的应用
  • NoSQL 之 Redis 配置与优化
  • 【科技公司的管理】
  • 深度解析 Caffeine:高性能 Java 缓存库
  • ​​MQTT​​通讯:​​物联网
  • 爬虫003----requests库
  • UP COIN:从 Meme 共识走向公链与 RWA 的多元生态引擎
  • VLN论文复现——VLFM(ICRA最佳论文)
  • 如何快速判断Excel文档是否被修改过?Excel多版本比对解决方案
  • 睿是信息携手Arctera,深化服务中国市场,共筑数据管理新未来
  • css元素超过两行隐藏并显示省略号全网独一份
  • 2025年CSS最新高频面试题及核心解析
  • ADIOS2 介绍与使用指南
  • 后台发热、掉电严重?iOS 应用性能问题实战分析全过程
  • 【数据结构初阶】--顺序表(一)
  • 【go的测试】单测之gomock包与gomonkey包
  • 板凳-------Mysql cookbook学习 (十--9)
  • K8S: etcdserver: too many requests
  • Halcon ——— OCR字符提取与多类型识别技术详解
  • Java 程序设计试题​
  • 多智能体协同的力量:赋能AI安全报告系统的智能设计之道
  • Elasticsearch(ES)与 OpenSearch(OS)
  • 苹果芯片macOS安装版Homebrew(亲测)
  • LoHoVLA技术:让机器人像人类一样思考与行动的统一框架
  • AI 智能体架构设计3阶段演进和3大关键技术对比剖析
  • 硬件工程师笔试面试高频考点汇总——(2025版)
  • 最近小峰一直在忙国际化项目,确实有点分身乏术... [特殊字符] 不过! 我正紧锣密鼓准备一系列干货文章/深度解析
  • SpringBoot中使用表单数据有效性检验
  • Ollama 在LangChain中的应用 Python环境