list操作时,出UnsupportedOperationException异常
来源:互联网 发布:智能楼宇 知乎 编辑:程序博客网 时间:2024/04/29 07:53
我们在使用collection框架code时,会时常遇到UnsupportedOperationException异常,有些人很不了解为什么抛出这个异常,会很郁闷,但是那些只知道code的代码工人不会想这些问题。下面我作一下解释,可能也不是很正确。
其实我们主要的疑惑可能是:java既然提供了这个方法,为什么我们调用要抛出异常,说不支持这个操作。我们先看一段代码:
List list1 = new ArrayList();
list1.add("test");
String[] array = new String[2];
List list2 = Arrays.asList(array);
List list3 = new ArrayList(list2);
list3.add("test");
array[0] = "test2";
System.out.println(list2.get(0));
list2.add("test");//抛出异常
在执行到l2.add("test")时抛出如下异常:
test2
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:151)
at java.util.AbstractList.add(AbstractList.java:89)
at TesException.main(TesException.java:20)
为什么会这样呢?
解释如下:
上面代码中list1是用正常方式下创建的List,可以增删内容
而list2是一个固定大小的List,不可以对其进行进行修改操作,对array的任何操作,若想修改list3的内容,只能通过修改其对应的array,从上面这一点也是可以看出的(关于这些解释可以参看api文档)。那么为什么会这样呢,其实List结构按是否可修改也是可以在分为两个类型的,但是collection框架已经有太多的接口类型了,若在对每种接口类型都分出一个unmodifiable类型的接口,那么最后collection框架会更大,对于学习与使用都会需要记住更多的接口。所以我想这样做的关键一点是:统一接口,减少开发人员的负担。但是若文档中没有对这一点说清楚,有些喜欢刨根问题的程序员会很郁闷。
我猜测Arrays.asList返回的List内容是Array的内容引用。若可以在List中修改,那么怎么同步呢?因为它们有一个本质的区别Array不能自动增大,若允许在List随便增大,则与其相应的Array的内容怎么保证不可修改呢?他们之间有一个阻抗。最后权衡一下,只能让Arrays.asList返回的List不可修改,或者让返回的List与Array之间没有关系,若这样的话,对于那些很大数组来说性能上就会很有影响。
- list操作时,出UnsupportedOperationException异常
- list操作 出UnsupportedOperationException异常
- List进行remove和add操作时缘何会报UnsupportedOperationException
- List报 java.lang.UnsupportedOperationException异常
- List操作的java.lang.UnsupportedOperationException
- String数组转List,java.lang.UnsupportedOperationException异常
- list 操作add时候 java.lang.UnsupportedOperationException 错误
- scala java 集合互操作导致UnsupportedOperationException异常
- 关于UnsupportedOperationException异常
- java.lang.UnsupportedOperationException异常
- 【转】关于UnsupportedOperationException异常
- java.lang.UnsupportedOperationException异常
- Android UnsupportedOperationException异常
- 关于UnsupportedOperationException异常
- 异常java.lang.UnsupportedOperationException
- java.lang.UnsupportedOperationException异常
- java.lang.UnsupportedOperationException异常
- java.lang.UnsupportedOperationException异常
- 单源最短路径(二)————BellmanFord算法
- 在Windows平台下使用php的mail函数发送邮件
- 采用Windows Embedded 操作系统平台的医疗设备和系统设计
- Java设计模式(九)
- window中reload()和location区别
- list操作时,出UnsupportedOperationException异常
- SQL备份语句
- 针对javascript回调函数传参数的简单实例(转自百度知道)
- Windows CE的VC开发工具包
- 创建解决方案注意的问题
- 配置错误
- ABAP常用function2
- 数据库连接
- 封装使用ALV