Java中List.remove报错UnsupportedOperationException

Java中List.remove(removeRange,clear类似) 报出 UnsupportedOperationException 的错误。原来该List是一个AbstractList,不支持增删改操作。

一般情况下我们会使用 LinkedList 和 ArrayList ,什么情况下出现 AbstractList 呢?通过 ArrayList.asList() 函数得到的 List 就是 AbstractList。该AbstractList只是简单地在已有的元素数组上套了一层List 的接口,所以不支持增删改操作。如果希望能增删改,必须 new 一个LinkedList 或ArrayList。

异常:

String str = "a,b,c";
        String[] arr = str.split(",");
        ArrayList<String> list = (ArrayList<String>) Arrays.asList(arr);
        list.remove("a");
        for (String s : list) {
            System.out.println(s);
        }

Java中List.remove报错UnsupportedOperationException,布布扣,bubuko.com

时间: 2024-10-04 06:58:49

Java中List.remove报错UnsupportedOperationException的相关文章

Java中List.remove报UnsupportedOperationException异常

今天项目中有个需求场景: A和B都是List,而B是A的子集,现在想求A和B的差集. 想到了List中提供的removeAll()方法可以求得差集,但是结果确报了UnsupportedOperationException异常. 仔细分析了下,List A我是通过数组经过Arrays.asList()转化成List,但是它是继承AbstractList的子类,而AbstractList是不支持removeAll()和remove()操作的. 如果要执行remove()和removeAll()操作,

java中的@Override报错解决

问题: 有时候在java的Eclipse工程中会遇到@Override报错,把@Override去掉就好了,可是有时候@Overvide太多,不能从根本上解决问题. 分析: 这是jdk版本之间区别的问题: 在Jdk1.5中@Override就已经有了,但是对接口的实现是不支持的,所以报错. 在Jdk1.6以后无论是对父类的继承还是对接口的实现都支持了 解决:首先确保机器上已经安装了Jdk1.6的版本 然后,选择eclipse菜单Windows->Preferences-->java->C

java中mysql查询报错java.sql.SQLException: Before start of result set

异常:java.sql.SQLException: Before start of result set 解决方法:使用rs.getString();前一定要加上rs.next(); sm = conn.createStatement(); ResultSet rs = null; String sql_max = "SELECT id FROM a WHERE name= '" + name + "' ORDER BY online_time DESC LIMIT 1&qu

多线程AsyncTask中使用Jsoup 报错Caused by: java.lang.NoClassDefFoundError: org.jsoup.Jsoup

代码如下,在多线程AsyncTask类中的doInBackground调用Jsoup protected String doInBackground(String... params) { // TODO Auto-generated method stub Log.i(TAG, "doInBackground(Params... params) called"); try { Document doc=Jsoup.connect(params[0]).get(); Elements

windows平台在tomcat中启动cas报错解决

windows平台在tomcat中启动cas报错: Caused by: java.lang.UnsatisfiedLinkError: Could not load library. Reasons: [no jansi in java.library.path, 系统找不到指定的路径.] 解决办法:将jansi.dll文件放到C:\Windows\System32目录下即可. 注意:jansi.dll文件在使用gradle编译打包cas时会下载到C:\Users\${用户名}\.gradle

MyEclipse8.6中提交SVN报错

上周五(11月27日)的时候,从TortoiseSVN提交项目报错,然后直接从MyEclipse中检出来,修改后提交同样报错. MyEclipse8.6中提交SVN报错,错误提示如下: commit -m "车牌号码中的字母自动转为大写" C:/Workspaces/VIMSystem/src/com/anche/action/ActIcRecord.java svn: Commit failed (details follow): svn: Can't write activity

针对Flex+Java使用RemoteObject通讯 报错Channel.Connect.Failed error NetConnection.Call.Failed 404

今天在Flex中使用RemoteObject进行java调用时,报错 [RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 404: url: 'http://localhost:8080/UnitCi

转 在子线程中new Handler报错--Can&#39;t create handler inside thread that has not called Looper.prepare()

在子线程中new一个Handler为什么会报以下错误? java.lang.RuntimeException:  Can't create handler inside thread that has not called Looper.prepare()  这是因为Handler对象与其调用者在同一线程中,如果在Handler中设置了延时操作,则调用线程也会堵塞.每个Handler对象都会绑定一个Looper对象,每个Looper对象对应一个消息队列(MessageQueue).如果在创建Ha

java数据库执行迁移报错Error creating bean with name &#39;flywayInitializer&#39; defined in class path resource

报错原因 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocati