0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

不要让Arrays.asList()的陷阱坑了你的代码!

jf_ro2CN3Fa 来源:CSDN 2023-07-26 14:27 次阅读

Java中,我们经常需要将数组转换为List来方便地进行操作。Arrays.asList()方法是一种常见的方式,但是它存在一个不太常见但需要注意的坑。

本文将深入探讨Arrays.asList()的使用,揭示其中的陷阱,并提供解决方案。

Arrays.asList()方法介绍

Arrays.asList()方法是将数组转换为List的方法,它返回一个List对象,但这个List对象并不是java.util.ArrayList对象,而是Arrays内部的ArrayList对象。

Arrays.ArrayList类继承自AbstractList,实现了List接口。它重写了add()、remove()等修改List结构的方法,并将它们直接抛出UnsupportedOperationException异常,从而禁止了对List结构的修改。

具体来说,Arrays.asList()方法返回的是Arrays类中的一个私有静态内部类ArrayList,它继承自AbstractList类,实现了List接口。

Arrays.asList()方法的使用非常简单,只需要将一个数组作为参数传递给该方法即可。例如:

String[]arr=newString[]{"a","b","c"};
Listlist=Arrays.asList(arr);

Arrays.asList()方法的坑

尽管Arrays.asList()方法很方便,但也存在一些坑,其中最常见的一个是:在使用Arrays.asList()方法时,如果对返回的List对象进行修改(例如增加、删除元素),将会抛出"UnsupportedOperationException"异常。

为什么会出现这个异常呢?这是因为Arrays.asList()方法返回的List对象,是一个固定大小的List,不能进行结构上的修改,否则会抛出异常。

下面的代码演示了这个问题:

String[]arr=newString[]{"a","b","c"};
Listlist=Arrays.asList(arr);
list.add("d");//抛出UnsupportedOperationException异常

上述代码中,我们尝试向List对象中添加一个新的元素"d",结果会抛出"UnsupportedOperationException"异常。

解决Arrays.asList()方法的坑

要解决Arrays.asList()方法的坑,我们需要将返回的List对象转换为一个可修改的List对象。有几种方法可以实现这个目标:

方法一:使用java.util.ArrayList类

我们可以使用java.util.ArrayList类,将Arrays.asList()方法返回的List对象转换为一个java.util.ArrayList对象,示例如下:

String[]arr=newString[]{"a","b","c"};
Listlist=newArrayList<>(Arrays.asList(arr));
list.add("d");//正常运行

上述代码中,我们首先使用Arrays.asList()方法将一个数组转换为一个List对象,然后使用ArrayList的构造方法,将这个List对象转换为一个java.util.ArrayList对象,最后可以向这个ArrayList对象中添加元素。

方法二:使用Collections类

我们也可以使用Collections类提供的静态方法,将Arrays.asList()方法返回的List对象转换为一个可修改的List对象,示例如下:

String[]arr=newString[]{"a","b","c"};
Listlist=newArrayList<>(Arrays.asList(arr));
Collections.addAll(list,"d");//正常运行

通过Collections.addAll()方法,我们可以将数组中的元素逐个添加到一个新的ArrayList对象中,从而实现了可修改性。

总结

在使用Arrays.asList()方法时,需要注意返回的List对象是一个固定大小的List,不支持结构上的修改操作。为了避免这个陷阱,我们可以使用java.util.ArrayList或Collections类提供的方法将返回的List对象转换为可修改的List。通过了解这个陷阱并采取相应的解决方案,我们可以安全地将数组转换为List,并避免潜在的异常情况。

不要让Arrays.asList()的陷阱坑了你的代码!

在Java中,我们经常需要将数组转换为List来方便地进行操作。Arrays.asList()方法是一种常见的方式,但是它存在一个不太常见但需要注意的坑。本文将深入探讨Arrays.asList()的使用,揭示其中的陷阱,并提供解决方案。

Arrays.asList()方法介绍

Arrays.asList()方法是将数组转换为List的方法,它返回一个List对象,但这个List对象并不是java.util.ArrayList对象,而是Arrays内部的ArrayList对象。

Arrays.ArrayList类继承自AbstractList,实现了List接口。它重写了add()、remove()等修改List结构的方法,并将它们直接抛出UnsupportedOperationException异常,从而禁止了对List结构的修改。

具体来说,Arrays.asList()方法返回的是Arrays类中的一个私有静态内部类ArrayList,它继承自AbstractList类,实现了List接口。

Arrays.asList() 方法的使用非常简单,只需要将一个数组作为参数传递给该方法即可。例如:

String[]arr=newString[]{"a","b","c"};
Listlist=Arrays.asList(arr);

Arrays.asList()方法的坑

尽管Arrays.asList()方法很方便,但也存在一些坑,其中最常见的一个是:在使用Arrays.asList()方法时,如果对返回的List对象进行修改(例如增加、删除元素),将会抛出"UnsupportedOperationException"异常。

为什么会出现这个异常呢?这是因为Arrays.asList()方法返回的List对象,是一个固定大小的List,不能进行结构上的修改,否则会抛出异常。

下面的代码演示了这个问题:

String[]arr=newString[]{"a","b","c"};
Listlist=Arrays.asList(arr);
list.add("d");//抛出UnsupportedOperationException异常

上述代码中,我们尝试向List对象中添加一个新的元素"d",结果会抛出"UnsupportedOperationException"异常。

解决Arrays.asList()方法的坑

要解决Arrays.asList()方法的坑,我们需要将返回的List对象转换为一个可修改的List对象。有几种方法可以实现这个目标:

方法一:使用java.util.ArrayList类

我们可以使用java.util.ArrayList类,将Arrays.asList()方法返回的List对象转换为一个java.util.ArrayList对象,示例如下:

String[]arr=newString[]{"a","b","c"};
Listlist=newArrayList<>(Arrays.asList(arr));
list.add("d");//正常运行

上述代码中,我们首先使用Arrays.asList()方法将一个数组转换为一个List对象,然后使用ArrayList的构造方法,将这个List对象转换为一个java.util.ArrayList对象,最后可以向这个ArrayList对象中添加元素。

方法二:使用Collections类

我们也可以使用Collections类提供的静态方法,将Arrays.asList()方法返回的List对象转换为一个可修改的List对象,示例如下:

String[]arr=newString[]{"a","b","c"};
Listlist=newArrayList<>(Arrays.asList(arr));
Collections.addAll(list,"d");//正常运行

通过Collections.addAll()方法,我们可以将数组中的元素逐个添加到一个新的ArrayList对象中,从而实现了可修改性。

总结

在使用Arrays.asList()方法时,需要注意返回的List对象是一个固定大小的List,不支持结构上的修改操作。为了避免这个陷阱,我们可以使用java.util.ArrayList或Collections类提供的方法将返回的List对象转换为可修改的List。通过了解这个陷阱并采取相应的解决方案,我们可以安全地将数组转换为List,并避免潜在的异常情况。

不要让Arrays.asList()的陷阱坑了你的代码!





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA语言
    +关注

    关注

    0

    文章

    138

    浏览量

    19976
  • Arrays
    +关注

    关注

    0

    文章

    6

    浏览量

    6374

原文标题:Arrays.asList() 隐藏的陷阱,你避开了吗?

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    不要让其他人的技术债务影响到你

    编写的代码所带来的债务。就像西班牙、希腊和葡萄牙等国家的金融负债会拖累全球经济一样,其他人所编写的软件中的债务问题也会拖累,即便在自己的代码中对债务的管理保持着非常负责的态度也是如
    发表于 12-16 14:43

    麻烦大家不要再发有密码的代码好吗

    论坛是大家来学习的地方,不是来炫耀的地方,请问上传个加密代码,到底这种贴存在有什么意义?如果不想与大家分享,或者因为公司原因不能让大家看到,那就不要上传上来嘛,不要让大家空欢喜一场。
    发表于 08-07 12:53

    4大绝招护身 参加培训不被

    有5方面:1.导师和助教支撑技术层面;  2.有质量的教学资料可保证学习的系统和连贯性;  3.hr的阅历和总结概括能力影响软能力的提升;  4.敲代码的团队氛围;  5.推荐就业机会。  既然选择
    发表于 07-11 14:04

    【HarmonyOS HiSpark AI Camera试用连载 】九九八十一的第一--拆箱

    `以下过来人想说的话和一些积累总结。没啥深入的经验感觉到好失败。 0号。注意不要手残。一个人生道理:差不多就得了,不要没完没了!!! 1号
    发表于 10-21 22:41

    说说在鸿蒙开发时遇到的

    说说在鸿蒙中遇到的~
    发表于 11-20 17:21

    THAT300series Matched Transistor Arrays

    Array ICS作为 专业级的低噪音,高性能匹配阵列晶体管ICS。低噪音:0.75nV/√HZ 高速度:fT =350MHZ。可以很好的兼容ADI和TI的相关Matched Transistor Arrays/Matched Monolithic Transistor Arra
    发表于 04-26 11:29

    Java数组的常用方法_Java:数组工具类Arrays类的常用方法的用法及代码

    本文主要详细介绍了Java数组的常用方法以及数组工具类Arrays类的常用方法的用法及代码
    发表于 01-29 10:25 2788次阅读

    多云存储管理的陷阱如何避免

    当组织使用多个云平台进行存储时,不要让常见问题(例如安全性不足或供应商锁定)抹杀了可以获得的诸多好处。
    发表于 05-18 11:09 533次阅读

    如何编写无法维护的代码

    你不想练功过度走火入魔吧。那就不要让你的代码一眼看去就完全无法维护,只要它实质上是那样就行了。否则,你的代码就有被重写或重构的风险!
    的头像 发表于 09-05 10:05 3417次阅读

    电源技巧:不要让USB电压下降减慢充电器的速度资料下载

    电子发烧友网为你提供电源技巧:不要让USB电压下降减慢充电器的速度资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-10 08:51 24次下载
    电源技巧:<b class='flag-5'>不要让</b>USB电压下降减慢充电器的速度资料下载

    电源技巧:不要让U S B 电压下降减慢充电器的速度

    电源技巧:不要让U S B 电压下降减慢充电器的速度
    发表于 11-03 08:04 0次下载
    电源技巧:<b class='flag-5'>不要让</b>U S B 电压下降减慢充电器的速度

    Java中Arrays类是什么 Arrays常用方法

    了解Arrays类的概念 **A****rrays** 位于java.util包下,Arrays是一个操作数组的工具类。 Arrays常用方法 Arrays.fill:
    的头像 发表于 02-17 15:11 824次阅读
    Java中<b class='flag-5'>Arrays</b>类是什么 <b class='flag-5'>Arrays</b>常用方法

    不要让旧设备损害您的SAN

    电子发烧友网站提供《不要让旧设备损害您的SAN.pdf》资料免费下载
    发表于 09-01 15:05 0次下载
    <b class='flag-5'>不要让</b>旧设备损害您的SAN

    Arrays的copyOf,copyOfRange和fill方法

    在本文中,我们来看看 java.util.Arrays ,我们可以使用 Arrays 创建,比较,排序,搜索,stream 和转化数组。 创建 我们来看看,使用Arrays 怎么创建一个新的数组
    的头像 发表于 09-25 14:12 294次阅读

    JDK中java.lang.Arrays 类的源码解析

    来揭开它神秘的面纱。 java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用。 1、asList
    的头像 发表于 10-11 15:31 413次阅读
    JDK中java.lang.<b class='flag-5'>Arrays</b> 类的源码解析