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

Arrays.asList 和 java.util.ArrayList 区别

理解 Java 中的 Arrays.asList 和 java.util.ArrayList 的区别

在 Java 编程中,Arrays.asList 方法和 java.util.ArrayList 是两种常用的处理列表数据的方式。虽然它们在功能上看起来相似,但在内部实现和使用上有着本质的不同。本文将探讨这两种方式的区别,以及为什么 Arrays.asList 返回的是一个固定大小的列表。

什么是 Arrays.asList?

Arrays.asList 是一个静态方法,它将一个数组转换成一个固定大小的列表。这个方法返回的是 java.util.Arrays$ArrayList 类的实例,这是一个内部的、私有的静态类。关键点在于,这个返回的列表是直接由原始数组支持的。这意味着,当你修改这个列表时,实际上是在修改原始数组中的数据。

主要特性:
  • 固定大小:通过 Arrays.asList 创建的列表不能增加或减少元素。尝试添加或删除元素将抛出 UnsupportedOperationException
  • 高效:因为列表是数组的直接视图,所以没有额外的内存分配和数据复制。

什么是 java.util.ArrayList?

相比之下,java.util.ArrayList 是一种基于数组实现的可变大小的列表集合。它实现了 List 接口,并提供了动态数组的功能,这意味着它可以在运行时根据需要增长和缩小。

主要特性:
  • 可变大小:可以自由地添加和删除元素。
  • 独立于原始数组ArrayList 通常是从一个数组或集合复制数据而来,但它存储的数据是独立的,修改 ArrayList 不会影响原始数据。

Arrays.asList的返回值变为 java.util.ArrayList

import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;public class ListExample {public static void main(String[] args) {// 创建一个数组Integer[] array = {1, 2, 3};// 使用 Arrays.asList() 创建一个列表List<Integer> fixedSizeList = Arrays.asList(array);// 将固定大小的列表转换为可变的 ArrayListList<Integer> arrayList = new ArrayList<>(fixedSizeList);// 现在可以自由添加和删除元素arrayList.add(4);  // 添加元素arrayList.remove(Integer.valueOf(2));  // 删除元素// 输出修改后的列表内容System.out.println(arrayList);}
}

关键步骤:

  1. 创建固定列表:首先使用 Arrays.asList() 方法将数组转换成一个固定大小的列表。这个列表是由原始数组支持的,所以它不能改变大小。

  2. 转换为 ArrayList:通过将这个固定大小的列表作为参数传递给 ArrayList 的构造函数,你创建了一个新的 ArrayList。这个新的 ArrayList 是完全独立的,它在内部复制了所有元素,因此修改它不会影响原始数组。

  3. 操作列表:现在,你可以自由地添加或删除列表中的元素,就像操作任何标准的 ArrayList 那样。

这种方法简单且有效,特别适合需要从数组转换来的数据进行多次和复杂的列表操作时使用。

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

相关文章:

  • 代码随想录-Day44
  • CriticGPT: 用 GPT-4 找出 GPT-4 的错误
  • SpringBoot:SpringBoot中调用失败如何重试
  • 2024-06-24 问AI: 在大语言模型中,什么是ray?
  • 仓库管理系统09--修改用户密码
  • 在Spring Data JPA中使用@Query注解
  • 【UE5.1】Chaos物理系统基础——01 创建可被破坏的物体
  • Linux下SUID提权学习 - 从原理到使用
  • Redis主从复制搭建一主多从
  • GPT-4o文科成绩超一本线,理科为何表现不佳?
  • Lombok的hashCode方法
  • 关于springboot创建kafkaTopic
  • OOAD的概念
  • Day47
  • 【面试系列】后端开发工程师 高频面试题及详细解答
  • mac|浏览器链接不上服务器但可以登微信
  • Spring Cloud Alibaba之负载均衡组件Ribbon
  • tkinter显示图片
  • 000.二分查找算法题解目录
  • 数据资产赋能企业决策:通过精准的数据分析和洞察,构建高效的数据资产解决方案,为企业提供决策支持,助力企业实现精准营销、风险管理、产品创新等目标,提升企业竞争力
  • 【java开发环境】多版本jdk 自由切换window和linux
  • MySQL实训项目——餐饮点餐系统
  • 昇思MindSpore学习总结七——模型训练
  • AI时代创新潮涌,从探路到引路,萤石云引领千行百业创新
  • 计算机毕业设计Python深度学习美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
  • 【鸿蒙学习笔记】鸿蒙ArkTS学习笔记
  • 广东行政职业学院数据智能订单班开班暨上进双创工作室签约仪式圆满结束
  • python与matlab微分切片的区别
  • MSPG3507——蓝牙接收数据显示在OLED,滴答定时器延时500MS
  • Linux 安装 Redis 教程