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

java基础03——Arrays.asList与ArrayList的区别(基本概念、用法、使用场景)

1. 基本概念

  • Arrays.asList: 是一个静态方法,用于将一个数组转换为一个固定大小的 List

  • ArrayList: 是 java.util 包中的一个常用的实现 List 接口的类。它是一个动态数组,可以自动调整大小,支持添加和删除元素等操作。

2. 用法对比

Arrays.asList 的用法
String[] array = {"Apple", "Banana", "Cherry"};
List<String> list = Arrays.asList(array);
ArrayList 的用法
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

3. 特性对比

1. 大小可变性
  • Arrays.asList: 返回的 List 是固定大小的。即:不能向列表中添加或移除元素,否则会抛出 UnsupportedOperationException

  • ArrayList: 是一个可变大小的集合,你可以随意添加或删除元素。

2. 与原始数组的关系
  • Arrays.asList: 返回的 List 与原始数组共享内存。对 List 的更改会反映在数组上,反之亦然。

  • ArrayList: ArrayList 与原始数组没有直接关系,它维护自己的动态数组,元素的更改不会影响其他集合或数组。

3. 性能
  • Arrays.asList: 因为 Arrays.asList 只创建一个 List 视图,而不复制数组,所以它的性能开销很小。

  • ArrayList: ArrayList 在添加元素时可能会触发数组的重新分配(resize),特别是在元素数量超过当前容量时。

4. 使用场景

Arrays.asList 的使用场景:
  • 静态或不可变集合: 当你需要一个静态、不可变的 List,并且只想进行读取操作时,可以使用 Arrays.asList
  • 方法参数: 当你需要将一个数组作为 List 传递给方法时,使用 Arrays.asList 可以快速转换。
  • 固定大小集合: 当你知道集合的大小不会改变时,Arrays.asList 是一个轻量级的选择。
ArrayList 的使用场景:
  • 动态集合: 当你需要一个可以动态增加或减少元素的集合时,ArrayList 是首选。
  • 频繁操作: ArrayList 支持添加、删除、修改元素等操作,非常适合需要对集合进行频繁操作的场景。
  • 随机访问: ArrayList 提供了高效的随机访问能力(通过索引),非常适合需要快速访问元素的场景。

5. 代码示例对比

Arrays.asList
String[] array = {"A", "B", "C"};
List<String> list = Arrays.asList(array);// 不允许 add 或 remove 操作
list.set(1, "X"); // 可以修改
System.out.println(list); // 输出: [A, X, C]
System.out.println(Arrays.toString(array)); // 输出: [A, X, C]
ArrayList
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
list.add("D"); // 可以添加元素
list.remove("B"); // 可以删除元素
System.out.println(list); // 输出: [A, C, D]

总结

  • Arrays.asList: 适用于创建一个固定大小、与数组共享内存的 List。常用于静态、不可变的集合场景。
  • ArrayList: 适用于需要动态调整大小、频繁操作的集合场景。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 24/8/17算法笔记 模仿学习算法
  • Spring中AbstractAutowireCapableBeanFactory
  • Unity3D开发之OnCollisionXXX触发条件
  • Spring Boot集成Devtools实现热更新?
  • 8.15 day bug
  • 最佳薪酬管理系统盘点:9款优选推荐
  • 微信答题小程序产品研发-后端开发
  • 重复的子字符串 | LeetCode-459 | 字符串匹配 | KMP | 双指针
  • 融合创新:EasyCVR视频汇聚平台云计算技术与AI技术共筑雪亮工程智能防线
  • WEB漏洞-SQL注入之简要SQL注入
  • 零售业务产品系统应用架构设计(三)
  • 牛客网SQL 练习 一
  • 网络专线和IPsecVPN在使用上有什么区别?
  • TypeScript 构建工具之 webpack
  • Spring框架中ReflectionUtils类
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Java面向对象及其三大特征
  • js 实现textarea输入字数提示
  • underscore源码剖析之整体架构
  • 将回调地狱按在地上摩擦的Promise
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 用jquery写贪吃蛇
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • # 数论-逆元
  • #、%和$符号在OGNL表达式中经常出现
  • #《AI中文版》V3 第 1 章 概述
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (三分钟)速览传统边缘检测算子
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)nsfocus-绿盟科技笔试题目
  • (转)ObjectiveC 深浅拷贝学习
  • (转)项目管理杂谈-我所期望的新人
  • (轉貼) UML中文FAQ (OO) (UML)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET delegate 委托 、 Event 事件
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Pointcut 使用
  • [30期] 我的学习方法
  • [AIGC 大数据基础]hive浅谈
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [Algorithm][综合训练][拜访][买卖股票的最好时机(四)]详细讲解
  • [AR]Vumark(下一代条形码)
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存