add、delete操作报UnsupportedOperationException的错

2024-05-03 08:48

本文主要是介绍add、delete操作报UnsupportedOperationException的错,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

add、delete操作报UnsupportedOperationException的错

addAll操作报UnsupportedOperationException错误

上面的代码,粗粗一看发现,没有什么bug

String temp="1,2,3;
List<String>list1 = Arrays.asList(temp.split(",")); 
list1.add("4");

可是报如下错误。就算报了错,也觉得没有错,难道list不能add吗?

后面才发现,其实不是不能add,只要改变 list大小的操作,都会报下面的错。
java.lang.UnsupportedOperationException

点进去看asList的源码,发现asList方法中返回了一个ArrayList的对象。asList的方法在java.util.Arrays这个包中,在这个aslist的方法的后面几行就是一个叫ArrayList的内部类。

天啊,好坑啊。

@SafeVarargs@SuppressWarnings("varargs")public static <T> List<T> asList(T... a) {return new ArrayList<>(a);}/*** @serial include*/private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable{private static final long serialVersionUID = -2764017481108945198L;private final E[] a;ArrayList(E[] array) {a = Objects.requireNonNull(array);}@Overridepublic int size() {return a.length;}....

首先看出,asList 方法返回的ArrayList只是java.util.Arrays中的内部类,我们常用的new ArrayListjava.util.Arraylist .内部类中的ArrayList继承了AbstractList,但是并没有重写addremove等方法,所以调用这些方法的时候调用的都是父类AbstractList中的方法。

java.util.Arrays中的内部类private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable

我们先看AbstractList包下的ArrayListadd方法

    public boolean add(E e) {add(size(), e);return true;}public void add(int index, E element) {throw new UnsupportedOperationException();}

他在这里直接就给抛异常了。C语言。

平常使用的java.util包下的ArrayListadd方法

    public boolean add(E e) {ensureCapacityInternal(size + 1);  // Increments modCount!!elementData[size++] = e;return true;}

###所以,Arrays.asList()返回的list仅支持那些不会改变集合大小的操作。

如果要用的话,也可以如下使用:

 List<String>list = new ArrayList<>(Arrays.asList(new String[]{"a", "b"}));list.add("c");System.out.println(list);

Arrays.asList0的结果作为构造器的参数传递给任何`Collection。这样就可以正常操作了

这篇关于add、delete操作报UnsupportedOperationException的错的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/956331

相关文章

java流操作对文件的分割和合并

学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并。     下面是代码: <span style="font-size:14px;">package com.dufy.file;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import

状态机的三种骚操作,值得你了解

点击上方“小麦大叔”,选择“置顶/星标公众号” 福利干货,第一时间送达 大家好,我是小麦,这次我们一起来学习C语言实现状态机的三种方法解析。 状态机的实现无非就是 3 个要素:状态、事件、响应。转换成具体的行为就 3 句话。 发生了什么事?现在系统处在什么状态?在这样的状态下发生了这样的事,系统要干什么? 用 C 语言实现状态机主要有 3 种方法:switch—case 法、表格驱动法、函数指针

NOR Flash 读写的高端操作,你看得懂吗?

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT下改造FlexSPI driver以AHB方式去写入NOR Flash。 痞子衡前段时间写过一篇 《串行NAND Flash的两大特性导致其在i.MXRT FlexSPI下无法XiP》,文章里介绍了 NAND Flash 的 Page Read 等待特性(发完 Read 命令后需要回读 Flash 内部状态寄存器 Bu

github 初始化操作小记

Git作为一种越来越重要的工具,github又如此流行,现在就简单记录一下git的基础操作,希望能帮助大家快速体验入门! 1 查看本地是否存在”公钥”和”私钥”  转存失败重新上传取消  如果没有,则执行:    ssh-keygen  -t rsa –C “youremail@example.com”   2 github上新建SSH key,可能key会有红线,放心不会报错!

Redis操作指南

目录 一、概述 4 1.1 目的 4 1.2 适用对象 4 1.3 文档内容 4 二、下载Redis及安装Redis 4 2.1 下载Redis 4 2.2 安装Redis 4 2.2.1 解压和编译 4 2.2.2 创建工作目录 5 三、 配置Redis 5 3.1 设置后台运行 5 3.2 设置工作目录 6 3.3 设置监听地址 6 3.4 设置pid存放路径 6

Swift学习 字符串的操作 2022年11月更新

Swift 字符串的使用 Swift 字符串是一系列字符的集合。例如 “Hello, World!” 这样的有序的字符类型的值的集合,它的数据类型为 String 一、基本使用 1.1字符串的拼接 let str1 = "Hello"let str2 = "World"let str3 = str1 + str2print(str3); 1.2 字符串的插入 for index

IDEA快捷键操作

其他部分 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键 Ctrl+[ OR ],可以跑到大括号的开头与结尾 Ctrl+Alt+J,用动态模板环绕 Ctrl+H,显示类结构图(类的继承层次) Ctrl+Q,显示注释文档 Ctrl+Up/Down,光标中转到第一行或最后一行下 Ctrl+Shift+Backspace,跳转到上次编辑的地方

【示例】Spring中通过JdbcTemplate来实现数据库的操作

示例来源于《JavaEE轻量级企业应用实战(第四版)》 示例思路:通过对beans.xml的配置来实现ComboPooledDataSource类的自动注入和相关数据库连接信息的设置。使用之前记得先导入c3p0的相关包,以下是代码实现 beans.xml配置文件 <?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http:

代码随想录算法训练营第五十五天| 583. 两个字符串的删除操作 ,72. 编辑距离

目录 题目链接: 583. 两个字符串的删除操作 思路 代码 题目链接: 72. 编辑距离 思路 代码 总结 题目链接:583. 两个字符串的删除操作 思路         ①dp数组,dp[i][j]表示下标以i-1结尾的word1和下标以j-1结尾的word2若要相等,所需删除元素的最小次数         ②递归公式,当word1[i-1] == word2

SQL之特殊操作view,date,null,isnull()

文章目录 viewdatenullisnull() view 视图是基于 SQL 语句的结果集的可视化的表。 CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition 这个我暂时理解为查询数据后,通过view view_name as的方式创建了一个视图表,内容是查询的字段,