当前位置: 首页 > 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: 适用于需要动态调整大小、频繁操作的集合场景。

http://www.mrgr.cn/news/4022.html

相关文章:

  • 棋牌推广最有效的方法有哪些呢
  • Window安装构建神器Jenkins详细教程
  • 外包干了8天,技术退步明显。。。。。
  • AI模型到底有多卷?Claude3.5 Sonnet如何在多个维度上超越GPT-4o
  • 微服务的基本理解和使用
  • 2024前端面试题-js篇
  • uniapp去掉页面导航条
  • yolov8 安装流程
  • MongoDB Compass初体验
  • uniapp-:class内使用函数报错及解决方法
  • 数学基础 -- 对导数为零点的分类与应用
  • 无人机航拍与ArcGIS融合实战:从地表观测到空间数据可视化的全方位指南!无人机图像拼接数据处理与分析、可视化与制图
  • CAD图纸加密软件有哪些?10款超级好用的CAD图纸加密软件推荐
  • RabbitMQ练习(Hello World)
  • 【数据结构篇】~顺序表
  • 了解BitWhisper窃密技术:跨越气隙的隐秘数据窃取手段
  • MySQL实战演练
  • 【Solidity】合约交互基础
  • 2-electron-builder-如何将ffmpe集成到Electron中
  • 算法笔记|Day25贪心算法III