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

一天一个Arrays小知识——Arrays.asList()

Arrays.asList() 是 Java 中的一个静态方法,它属于 java.util.Arrays 类。这个方法的主要作用是将一个数组转换成一个固定大小的列表(List),但这个列表是由原数组支持的,也就是说,列表是非同步的,并且其大小是固定的,因为列表的大小是由原数组的大小决定的,不支持通过 add() 或 remove() 方法来改变列表的大小

使用方法

import java.util.Arrays;  
import java.util.List;  public class Main {  public static void main(String[] args) {  // 创建一个数组  Integer[] numbers = {1, 2, 3, 4, 5};  // 使用 Arrays.asList() 将数组转换为列表  List<Integer> list = Arrays.asList(numbers);  // 遍历列表  for (Integer number : list) {  System.out.println(number);  }  // 注意:下面的代码会抛出 ConcurrentModificationException,因为返回的列表大小是固定的  // list.add(6); // 尝试添加元素会抛出异常  // 另一个常见的错误是尝试传递基本类型数组给 Arrays.asList()  // int[] basicNumbers = {1, 2, 3};  // List<Integer> basicList = Arrays.asList(basicNumbers); // 这不会按预期工作  // 因为 Arrays.asList() 会将 basicNumbers 数组本身作为列表的唯一元素  // 正确的做法是使用包装类型数组  Integer[] boxedNumbers = {1, 2, 3};  List<Integer> boxedList = Arrays.asList(boxedNumbers);  // 或者使用 Stream API 转换基本类型数组  int[] basicArray = {1, 2, 3};  List<Integer> streamList = Arrays.stream(basicArray).boxed().collect(Collectors.toList());  }  
}

注意事项

  1. 不可变大小:返回的列表大小固定,不支持通过 add() 或 remove() 方法修改。
  2. 类型安全Arrays.asList() 泛型参数必须是对象类型数组(如 Integer[]),如果传入基本类型数组(如 int[]),则整个数组会被视为列表中的单个元素。
  3. 性能:由于返回的列表是由原数组支持的,因此在性能上,访问列表元素(通过索引或迭代器)通常比访问原始数组要快,但修改列表(尽管不支持)或将其转换为新的列表(如使用 new ArrayList<>(Arrays.asList(array)))会涉及到额外的内存分配和可能的复制操作。
  4. 同步性:返回的列表不是同步的,如果需要在多线程环境下使用,请自行同步访问。

使用时机

  1. 将数组传递给需要集合参数的方法
    当你有一个数组,但需要将其传递给一个期望接收 List 或其他集合类型参数的方法时,Arrays.asList() 可以非常方便地将数组转换为一个列表。

  2. 简化集合初始化
    当你需要快速初始化一个只包含少量元素的集合时,使用 Arrays.asList() 可以比逐个添加元素到集合中更简洁。

  3. 作为循环或迭代的数据源
    在需要使用数组元素进行迭代,但又想利用集合的迭代器或增强型 for 循环(也称为 "for-each" 循环)时,Arrays.asList() 提供了便利。

  4. 与集合框架的其他部分配合使用
    Arrays.asList() 返回的列表可以与集合框架中的其他类(如 Collections 类的工具方法)一起使用,以执行如排序、搜索或过滤等操作。

  5. 作为不可变列表的源
    由于 Arrays.asList() 返回的列表是固定大小的,并且其修改操作(除了 set(),如果列表支持的话)会抛出 UnsupportedOperationException,因此它可以作为不可变列表的源,用于需要不可变集合的场景。

  6. 在泛型代码中使用
    在泛型编程中,当你需要明确指定集合中元素的类型时,Arrays.asList() 提供了类型安全的方式来从数组创建列表。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java在无人驾驶方向的就业方向
  • QT百度智能云API鉴权,查询 文心一言 服务调用情况
  • PXE服务器自助部署
  • Adobe ColdFusion反序列化漏洞(cve-2017-3066)
  • 【Day04】0基础微信小程序入门-学习笔记
  • SQL报错注入之updatexml
  • 数据仓库怎么建设?一文详解数仓的建设过程!
  • Haproxy搭建Web群集(群集)
  • c++----初识模板
  • 案例分享-国外UI设计界面赏析
  • 盘点5个PDF 怎么转换成 Word 的实用技巧
  • Elasticsearch 概述
  • SQLiteStudio 连接sqlite3数据库(真机数据库可视化调试)
  • 使用 VueDraggable 创建可拖拽列表的全面指南
  • Web开发-CSS篇-上
  • 深入了解以太坊
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【技术性】Search知识
  • 08.Android之View事件问题
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java,console输出实时的转向GUI textbox
  • JavaScript 基础知识 - 入门篇(一)
  • java小心机(3)| 浅析finalize()
  • Linux下的乱码问题
  • Magento 1.x 中文订单打印乱码
  • Node + FFmpeg 实现Canvas动画导出视频
  • Node项目之评分系统(二)- 数据库设计
  • Promise面试题2实现异步串行执行
  • Sass Day-01
  • Terraform入门 - 1. 安装Terraform
  • use Google search engine
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 思维导图—你不知道的JavaScript中卷
  • 追踪解析 FutureTask 源码
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 如何正确理解,内页权重高于首页?
  • ​flutter 代码混淆
  • ​渐进式Web应用PWA的未来
  • ​人工智能书单(数学基础篇)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #Z2294. 打印树的直径
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Forward) Music Player: From UI Proposal to Code
  • (原)Matlab的svmtrain和svmclassify
  • (转载)CentOS查看系统信息|CentOS查看命令
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net mvc总结
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET连接MongoDB数据库实例教程
  • .NET文档生成工具ADB使用图文教程