asList remove异常原因分析

news/2024/7/2 0:58:40

使用Arrays.asList后,调用remove异常问题记录。

        // 第一种
        String str = "第一个,第二个,第三个,第四个,";
        List<String> list = Arrays.asList(str.split(","));
        list.remove(1);

        // 第二种
        List<String> list2 = new ArrayList<>();
        list2.add("第一个");
        list2.add("第二个");
        list2.add("第三个");
        list2.add("第四个");
        list2.remove(1);

//        // 第三种
//        List<String> list3 = new LinkedList<>();
//        list3.add("第一个");
//        list3.add("第二个");
//        list3.add("第三个");
//        list3.add("第四个");
//        list3.remove(1);

以上三写法,在执行remove(1)时,第一种会出现异常。

接下来分析下原因:
我们查看第一种代码实现中的Arrays.asList()这个接口源码。如下:
Array.asList实现源码
这时候调用的是Arrays.java这个文件,然后返回的是一个静态的ArrayList对象。

我们再来看下第二种写法中的源码实现,如下:
ArrayList.java源码实现
这时候调用的是ArrayList.java这个文件。

我们发现两个ArrayList类都继承了AbstractList类,AbstractList类的源码实现如下:
AbstractList.java源码
我们可以看到该类的remove()接口会抛出一个UnsupportedOperationException异常,这也就是我们第一种写法得到异常。那么为什么第二种写法不会抛出异常呢?因为第二种写法中调用的ArrayList类,重写了remove()接口,覆盖了父类AbstractList实现的remove()接口。截图如下:
在这里插入图片描述


http://www.niftyadmin.cn/n/3656124.html

相关文章

Microsoft Visual Basic for Application技术概要

Microsoft Visual Basic for Application技术概要众所周知&#xff0c;Visual Basic系列产品在Microsoft的产品线中占有非常独特的位置&#xff0c;从IE&#xff0c;到Office&#xff0c;乃至Visual Studio系列产品中总要配备一个基于Visual Basic的描述引擎以便进行功能扩展。…

mongodb 多表关联查询

需求 mongodb库中有三张表&#xff0c;需求&#xff1a;查询表A中的数据&#xff0c;但这些数据的threadId字段&#xff0c;不能存在于表B和表C中&#xff0c;做一个过滤查询&#xff0c;需要分页和排序。 mongodb 命令实现 {"aggregate": "__collection__&q…

WPF,一次洗牌……

WPF,一次洗牌……昨天&#xff0c;在CSDN上看一篇孟岩的文章&#xff0c;谈及WPF带来的震撼&#xff0c;其实&#xff0c;WPF对今天的开发者来讲&#xff0c;已经不是很新的概念了&#xff0c;在MSN里&#xff0c;也与部分朋友交流对WPF的看法。最早体验WPF&#xff0c;也许是在…

Tangram开源版本发布

Tangram开源版本发布经过一段难忘的忙碌&#xff0c;Tangram的第一个完整版本杀青了。回想来到北京的几年&#xff0c;可谓感慨万千&#xff0c;开发产品是心志的磨练&#xff0c;这话没错&#xff01;经历身体与身心的煎熬&#xff0c;使我深刻的意识到勇者有畏&#xff0c;但…

【MQTT】Esp32数据上传采集:最新mqtt插件(支持掉线、真机调试错误等问题)

前言 这是我在Dcloud发布的插件-最完整Mqtt示例代码&#xff08;解决掉线、真机调试错误等问题&#xff09;&#xff0c;经过整改优化和替换Mqtt的js文件使一些市场上出现的问题得以解决&#xff0c;至于跨端出问题&#xff0c;可能原因有很多&#xff0c;例如&#xff0c;合法…

implement 和 extends 的区别

extends&#xff1a;拓展; 扩大范围 implement&#xff1a;使生效 ; 贯彻 ; 执行 重点&#xff1a; extends 用在同类之间。比如&#xff1a;classC 继承 classA&#xff0c;interFaceC 实现 interFaceA。implement 用在非同类之间。比如&#xff1a;classC 实现 interFaceA的…

让Internet Explorer成为你的软件集成平台

让Internet Explorer成为你的软件集成平台&#xff08;一&#xff09;最近一段时间&#xff0c;经常与朋友们探讨与浏览器相关的技术问题&#xff0c;多少年来&#xff0c;浏览器的问题一直是软件界的热点&#xff0c;无论是体验、操作习惯、安全&#xff0c;还是技术等问题&am…

@Async 异步不起作用

一、异步接口实现 java中的异步接口实现比较简单&#xff0c;主要有两步&#xff1a; 1、在ContentServiceApplication上添加EnableAsync。2、在需要异步的接口上添加Async接口。 // 第一步EnableAsync public class ContentServiceApplication {public static void main(St…