Arrays.asList()方法的使用

Arrays.asList() 详解 Arrays.asList() 详解 【1. 要点】 该方法是将数组转化成List集合的方法。 List list = Arrays.asList(“a”,“b”,“c”); 注意: (1)该方法适用于对象型数据的数组(String、Integer…) (2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean) (3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新 (4)不支持add()、remove()、clear() 阅读详情

该方法是将数组转化为list

java.util.Arrays.asList() 的一般用法

List 是一种很有用的数据结构,如果需要将一个数组转换为 List 以便进行更丰富的操作的话,可以这么实现:


String[] myArray = { "Apple", "Banana", "Orange" }; 
List<String> myList = Arrays.asList(myArray);

将需要转化的数组作为参数,或者直接把数组元素作为参数,都可以实现转换。

 

出现的错误及相应的解决方案

一: 将原生数据类型数据的数组作为参数

public class Test {
   public static void main(String[] args) {
      int[] myArray = { 1, 2, 3 };
      List myList = Arrays.asList(myArray);
      System.out.println(myList.size());
   }
}

上面这段代码的输出结果是什么,会是3吗?如果有人自然而然地写出上面这段代码的话,那么他也一定会以为 myList 的大小为3。很遗憾,这段代码的输出结果不是3,而是1。如果尝试遍历 myList ,你会发现得到的元素不是1、2、3中的任意一个,而是一个带有 hashCode 的对象。为什么会如此?
  来看一下asList 方法的签名:

public static <T> List<T> asList(T... a)

注意:参数类型是 T ,根据官方文档的描述,T 是数组元素的 class。
  如果你对反射技术比较了解的话,那么 class 的含义想必是不言自明。我们知道任何类型的对象都有一个 class 属性,这个属性代表了这个类型本身。原生数据类型,比如 int,short,long等,是没有这个属性的,具有 class 属性的是它们所对应的包装类 Integer,Short,Long。
  因此,这个错误产生的原因可解释为:asList 方法的参数必须是对象或者对象数组,而原生数据类型不是对象——这也正是包装类出现的一个主要原因。当传入一个原生数据类型数组时,asList 的真正得到的参数就不是数组中的元素,而是数组对象本身!此时List 的唯一元素就是这个数组。

 

解决方案:使用包装类数组

  如果需要将一个整型数组转换为 List,那么就将数组的类型声明为 Integer 而不是 int。

public class Test {
   public static void main(String[] args) {
      Integer[] myArray = { 1, 2, 3 };
      List myList = Arrays.asList(myArray);
      System.out.println(myList.size());
   }
}

另一种解决方案——他使用了 Java 8 新引入的 API:

public class Test {
   public static void main(String[] args) {
      int[] intArray = { 5, 10, 21 };
      //Java 8 新引入的 Stream 操作
      List myList = Arrays.stream(intArray).boxed().collect(Collectors.toList());
   }
}

 

二:试图修改 List 的大小

public class Test {
   public static void main(String[] args) {
      String[] myArray = { "Apple", "Banana", "Orange" };
      List<String> myList = Arrays.asList(myArray);
      myList.add("Guava");
   }
}

用 asList 方法产生的 List 是固定大小的,这也就意味着任何改变其大小的操作都是不允许的,所以上面会抛出异常。

asList 方法返回的确实是一个 ArrayList ,但这个 ArrayList 并不是 java.util.ArrayList ,而是 java.util.Arrays 的一个内部类。这个内部类用一个 final 数组来保存元素,因此用 asList 方法产生的 ArrayList 是不可修改大小的。

 

解决方案:创建一个真正的 ArrayList

public class Test {
   public static void main(String[] args) {
      String[] myArray = { "Apple", "Banana", "Orange" };
      List<String> myList = new ArrayList<String>(Arrays.asList(myArray));
      myList.add("Guava");
   }
}

在上面这段代码中,我们 new 了一个 java.util.ArrayList ,然后再把 asList 方法的返回值作为构造器的参数传入,最后得到的 myList 自然就是可以动态扩容的了。

从零开始安装 Windows 11 和 Ubuntu 22.04 双系统 本文详解Windows与Ubuntu 22.04双系统安装流程:需提前确认BIOS模式(UEFI/GPT或Legacy/MBR),关闭BitLocker加密、设备加密及快速启动;推荐Rufus/Ventoy制作启动盘。安装时需规划分区方案(建议单独划分EFI系统分区),注意引导器安装位置选择。双系统启动通过BIOS引导顺序管理,安装后需同步Windows与Linux系统时间。教程适配主流UEFI+GPT设备,强调操作前数据备份及Windows更新策略调整,避免兼容性问题。 阅读详情

相关推荐

LEC/FORMAL --- PARTIII debug

lec(logic equivalence checking)又叫formal check,是对ic design的综合,PR前后的设计进行逻辑对比检查的工具/手段,保证综合不改变rtl原始的logic function。目前用的较多的就是C家的formal工具。接下来介绍一下lec过程中遇到的问题以及debug手段。...

sinat_27691203的博客 7709

Arrays.asList详解和示例

注意 (1)该方法适用于对象型数据的数组(String、Integer…) (2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean) (3)该方法将数组与List列表链接起来:当更新其一个时,另一个自动更新 (4)不支持add()、remove()、clear()等方法 (5)此方法得到的List长度是不可变的 (6)asLis...

Venus's Blog 6万+

Win11下高效管理JDK1.8与JDK17双环境的实战指南

本文提供了一份在Windows 11系统上高效管理JDK 1.8与JDK 17双环境的实战指南。文章详细讲解了如何实现双版本切换,包括如何干净安装两个JDK、通过巧妙配置环境变量实现命令行一键切换,以及在不同IDE和构建工具中为项目独立配置JDK版本,旨在帮助Java开发者彻底解决版本冲突问题,提升开发效率。

ipfs8storage的博客 544

Arrays.asList()方法注意事项

在API中对asList()的描述 public static <T> List<T> asList(T... a) 返回由指定数组支持的固定大小的列表。(将返回的列表更改为“写入数组”。)该方法作为基于数组和基于集合的API之间的桥梁,与Collection.toArray()相结合 ,返回的列表是可序列化的,并实现RandomAccess。 此方法还提供了一种方便的方...

minghai 1040

Unity插件UniWebView实战:UGUI动态调整内嵌网页尺寸与交互优化

本文详细解析了如何在Unity游戏中使用UniWebView插件实现内嵌网页的动态尺寸适配与深度交互。核心在于利用Reference Rect Transform属性,将网页窗口精准绑定至UGUI控件,并随其动态调整。文章进一步探讨了通过消息系统与JavaScript执行实现Unity与网页的双向通信,并提供了加载优化、过渡动画及事件拦截等实用技巧,助力开发者打造无缝、流畅的游戏内网页体验。

earth的博客 276

WS2812和homeassistant握手

本文学习了WS2812和homeassistant握手,后期会分享更多有趣物联网的操作从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。...

vor234的博客 811

Arrays.asList详解

内容来源于网络: Arrays.asList() 将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的静态内部类! 用这个对象对列表进行添加删除更新操作,就会报UnsupportedOperationException异常。 转载地址:https://www.c

dzp921101655的博客 1232

人形机器人 vs 机器狗SLAM:FAST_LIO_LOCALIZATION_HUMANOID的差异化优化方向

《FAST_LIO_LOCALIZATION_HUMANOID在人形与机器狗应用中的差异化优化策略》摘要: 格灵深瞳开源的FAST_LIO_LOCALIZATION_HUMANOID系统针对人形机器人和机器狗提出了差异化优化方案。人形机器人需应对双足步态带来的周期性晃动,通过动态盲区滤波、二阶运动模型补偿步态相位畸变,并修复重力向量计算误差。机器狗则需解决四足高频运动挑战,包括设计自适应地面分割算法、抑制IMU高频振动噪声,以及基于足端接触序列的非匀速运动建模。二者在传感器配置(高度/视角)、运动频率(1-

Studying…… 326

java.util.Arrays.asList 问题

From: http://www.cnblogs.com/zolra/archive/2011/03/02/1969235.html   JDK 1.4对java.util.Arrays.asList的定义,函数参数是Object[]。所以,在1.4中asList()并不支持

bennyraul的专栏 896

【同等学力】2005-数学⭐✨

有r个正方形排成一行,今用红、黄、白、蓝四种颜色给这个r个正方形染色,每个正方形只能染一种颜色,如果要求染红、黄、白色的正方形分别至少出现一个,问有多少种不同的染法?3、(4分)设G是一个有n个结点m条边的连通简单平面图,若n≥3,则m≤3n-6.4、(4分)证明:任何连通简单平面图至少有一个结点的度数不超过5

super_mochi1 306

数据库课程案例——电力公司收费管理系统分析与实践,完整带SQL语句

某电力公司收费管理信息系统实现客户信息、用电类型(类别号、类别名、电价)及业务员管理;实现客户用电信息管理(客户号、月份、用电类别号、用电度数);实现客户费用管理(客户号、月份、费用、收费标志),收费标志的默认值为“未收”;实现收费登记(客户、月份、应收费用、实收费用、业务员),并自动修改收费标志(用触发器实现);创建触发器,实现收费时自动更加应收费用和实收费用,计算本次结余,然后修改客户信息表中的结余金额;创建存储过程统计指定月份应收费用和实收费用;创建存储过程查询指定月份未交费的用户信息,以便崔费;创建

qq_44242804的博客 2763

Java基础(Arrays工具类)(asList()方法)(详细)

本篇博客详细的分析和解析了Java提供的工具类"Arrays"、以及它提供的最常用的几种操作"基本类型的数组"或"对象数组"的方法。其中包括Arrays.sort()、Arrays.binarySearch()、Arrays.toString()、Arrays.asList()、Arrays.copyOfRange()、Arrays.fill()方法。详细的介绍了Arrays.asList()方法。

岁岁岁平安的博客 2845

1. 如何使用扣子工作流一键生成儿童绘本(可以发到小红书,微信公众号图文等)

本文介绍了使用扣子智能体一键生成儿童绘本的工作流。用户只需输入绘本主题,系统会自动生成Markdown格式内容,可直接发布到优快云、小红书等平台,还支持推送至微信公众号草稿箱。操作步骤包括:访问扣子网站导入工作流源代码,输入主题试运行,查看实时进度和最终输出结果。工作流编辑器会显示每个节点的执行状态和耗时,支持通过"查看日志"功能回溯历史运行记录。文末附有工作流源代码下载链接。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1246

Arrays.asList()使用方法详解

Arrays.asList语法、使用场景详解

m0_62909831的博客 983

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java Arrays.asList()方法详解

本文是对Arrays.asList()方法从源码角度进行分析,解析使用中的一些困惑。 首先看Arrays.asList()的源码 public static <T> List<T> asList(T... a) { return new ArrayList<T>(a); } 使用该方法 可以将一个变长参数或者数组转换成List 看似很简单但实际使用起来却会发现存在很多问题,看下面代码来发现问题。 先来看第一个问题,基本类型数组作为参数问题。 publi

cristianoxm的博客 2万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

浅析Arrays.asList()方法

Arrays.asList()方法是将数组转化成List,是Arrays类中提供的静态方法,但在使用过程有很多需要注意的地方。以下代码为例: //数组转列表 import java.util.Arrays; import java.util.List; public class AsListTest { public static void main(String[] args) { String str[] = {"aa", "bb", "cc"}; in

m0_37942202的博客 3668

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

谨慎使用Arrays.asList()方法

再回到前面的java.util.AbstractList这个抽象类,在这里实现了iterator()方法,返回了一个内部类Itr的对象。看到这里,可能很多人就会怀疑是自己的代码的问题,毕竟java.util.ArrayList是支持removeAll()方法的,不可能报错。所以,调用removeAll()方法实际调用的是java.util.AbstractList的removeAll()方法。在Itr中的remove()方法,直接调用了java.util.AbstractList的remove()方法。

沐雨橙风ιε的博客 822

Arrays中asList()方法源码剖析

今天偶尔用到了Arrays中asList()方法,就看了下源码;然后想把自己理解的意思分享下,如果哪里写错了,希望大家纠正 // 数组转集合 @SafeVarargs public static &lt;T&gt; List&lt;T&gt; asList(T... a) { return new ArrayList&lt;&gt;(a); // 1.创建一个Ar...

qq_40274514的博客 673

Arrays.asList()方法:隐患与解决之道

方法是将数组转换为List的方法,它返回一个List对象,但这个List对象并不是对象,而是Arrays内部的ArrayList对象。类继承自AbstractList,实现了List接口。它重写了add()remove()等修改List结构的方法,并将它们直接抛出异常,从而禁止了对List结构的修改。具体来说,方法返回的是Arrays类中的一个私有静态内部类ArrayList,它继承自AbstractList类,实现了List接口。方法的使用非常简单,只需要将一个数组作为参数传递给该方法即可。

爱编程的鱼的博客 1945

java——Arrays.asList()方法

Arrays.asList() 是将数组作为列表 问题来源于: public class Test { public static void main(String[] args) { int[] a = {1,2,3,4}; List list = Arrays.asList(a); System.out.p...

weixin_30681615的博客 99

Java Arrays.asList()方法详解

本文是对Arrays.asList()方法从源码角度进行分析,解析使用中的一些困惑。 首先看Arrays.asList()的源码 public static List asList(T... a) { return new ArrayList(a); } 使用该方法可以将一个变长参数或者数组转换成List 看似很简单但实际使用起来却会发现存在很多问题,看下面代码来发现问题。

w574951402的博客 2万+

Arrays.asList()方法

因为之前老是用基本类型的数组转为List,然后出错,痛苦的教训。 文章转载自:https://blog.csdn.net/cntanghai/article/details/7188296 作者:胖大海Plus import java.util.Arrays; import java.util.List; /** * * 本类演示了Arrays类中的asList方法 * 通过四个段落来演示,体现出了该方法的相关特性. * * (1) 该方法对于基本数据类型的数组支持并不好,当数组是基本数

weixin_43869872的博客 204

使用Arrays.asList()方法时的注意事项

最近休五一假期,不是很想写长篇大论,因此最近三篇文章都是信手拈来的小总结。等假期结束开工之后自然会恢复正常。 java.util.Arrays.asList()方法是我们在日常工作中极其常用的方法之一,它可以方便地将数组类型转化为列表类型。例如: String[] teamsArray = { "Liverpool", "Man Utd", "Man City", "Arsenal...

LittleMagic's Blog 490
上一篇: Longest Valid Parentheses(最长有效括号)
下一篇: Find First and Last Position of Element in Sorted Array(在排序数组中查找元素的第一个和最后一个位置)
Heliumfly
博客等级 码龄8年 4粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值