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()操作,可以转化成Set()或者ArrayList、LinkedList才可以。

因为我的需求List A中的元素要保证唯一,所以我在数组转化成List之后又转化成了Set,之后就没问题了。

1 Set<String> setA = new HashSet<String>(Arrays.asList(arrA));

时间: 2024-11-03 21:18:47

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

Java中List.remove报错UnsupportedOperationException

Java中List.remove(removeRange,clear类似) 报出 UnsupportedOperationException 的错误.原来该List是一个AbstractList,不支持增删改操作. 一般情况下我们会使用 LinkedList 和 ArrayList ,什么情况下出现 AbstractList 呢?通过 ArrayList.asList() 函数得到的 List 就是 AbstractList.该AbstractList只是简单地在已有的元素数组上套了一层List

在foreach循环中使用remove报ConcurrentModificationException异常原因

在foreach循环中使用remove报ConcurrentModificationException异常原因 我的代码具体是这样的 int dindex=0; int did=getInt("请输入需要删除的学生学号:"); for (Student student:list) { if(student.id==did){ list.remove(student); } } 这样会导致remove后,导致list在循环中下标和实际已经被修改后的下标不一致 我自己的解决方案是: int

Java中抛出的各种异常

目录(?)[-] 引子 JAVA异常 处理异常机制 捕获异常trycatch 和 finally try-catch语句 trycatch-finally语句 try-catch-finally 规则异常处理语句的语法规则 trycatchfinally语句块的执行顺序 抛出异常 throws抛出异常 使用throw抛出异常 Throwable类中的常用方法 Java常见异常 runtimeException子类 IOException 其他 自定义异常 1. 引子 try…catch…fina

java中的@Override报错解决

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

Java中遇到过的一些异常及处理

异常:Bean named 'org.springframework.transaction.interceptor.TransactionInterceptor#0' is expected to be of type 'org.aopalliance.aop.Advice' but was actually of type 'org.springframework.transaction.interceptor.TransactionInterceptor'场景:在使用spring整合hib

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

Java中BigDecimal的一个除法异常

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.说明遇到除不尽的情况了,需要指定商的小数精度和舍入模式.比如: a=b.divide(c,2,RoundingMode.HALF_UP);

夯实Java基础系列10:深入理解Java中的异常体系

目录 为什么要使用异常 异常基本定义 异常体系 初识异常 异常和错误 异常的处理方式 "不负责任"的throws 纠结的finally throw : JRE也使用的关键字 异常调用链 自定义异常 异常的注意事项 当finally遇上return JAVA异常常见面试题 参考文章 微信公众号 Java技术江湖 个人公众号:黄小斜 - Java异常 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.c

Java中实现异常处理的基础知识

异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. 源代码示例: package yanzheng; //关于异常  2015.11.11 import javax.swing.*; public class AboutException { public static void main(String[] args) { int i=1, j=0, k; //   k=i/j;