think in java容器深入研究(未获取支持的操作)
来源:互联网 发布:eclipse改json字体 编辑:程序博客网 时间:2024/05/04 17:41
分析一个简单的代码
package containers;//: containers/Unsupported.java// Unsupported operations in Java containers.import java.util.*;public class Unsupported { static void test(String msg, List<String> list) { System.out.println("--- " + msg + " ---"); Collection<String> c = list; Collection<String> subList = list.subList(1,8); // Copy of the sublist: Collection<String> c2 = new ArrayList<String>(subList); try { c.retainAll(c2); } catch(Exception e) { System.out.println("retainAll(): " + e); } try { c.removeAll(c2); } catch(Exception e) { System.out.println("removeAll(): " + e); } try { c.clear(); } catch(Exception e) { System.out.println("clear(): " + e); } try { c.add("X"); } catch(Exception e) { System.out.println("add(): " + e); } try { c.addAll(c2); } catch(Exception e) { System.out.println("addAll(): " + e); } try { c.remove("C"); } catch(Exception e) { System.out.println("remove(): " + e); } } public static void main(String[] args) { List<String> list = Arrays.asList("A B C D E F G H I J K L".split(" ")); test("Modifiable Copy", new ArrayList<String>(list)); test("Arrays.asList()", list); }} /* Output:--- Modifiable Copy ------ Arrays.asList() ---retainAll(): java.lang.UnsupportedOperationExceptionremoveAll(): java.lang.UnsupportedOperationExceptionclear(): java.lang.UnsupportedOperationExceptionadd(): java.lang.UnsupportedOperationExceptionaddAll(): java.lang.UnsupportedOperationExceptionremove(): java.lang.UnsupportedOperationException*///:~
在main方法中test("Modifiable Copy", new ArrayList<String>(list));这行代码执行没有任何问题。
test("Arrays.asList()", list);代码在执行后,抛出了一堆的异常"java.lang.UnsupportedOperationException”。
分析结果:
List<String> list = Arrays.asList("A B C D E F G H I J K L".split(" "));
这行代码通过Arrays.asList生成Stirng[]数组,数组固定的长度,不允许对数组进行增加、删除、等操作。
这行代码test("Modifiable Copy", new ArrayList<String>(list));,将生成的数组,采用ArrayList容器进行封装,经查询源码ArrayList类继承AbstractList并实现List接口,并可以进行增加、删除、等操作。
public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serializable
查看AbstractList源码会发现,如果单单继承AbstractList但未重写add方法,则会抛出UnsupportedOperationException异常。
public abstract class AbstractList extends AbstractCollection implements List { /** * Sole constructor. (For invocation by subclass constructors, typically * implicit.) */ protected AbstractList() { } public void add(int index, Object element) {throw new UnsupportedOperationException(); }
- think in java容器深入研究(未获取支持的操作)
- Think in Java(十四):容器深入研究
- think in java 笔记 Chart17 容器的深入研究
- think-in-java(17)容器深入研究
- thingking in Java 容器深入研究
- Thinking in Java:容器深入研究
- Java容器总结(容器深入研究)
- think in java填充容器(事例简述)
- 深入java--容器深入研究
- java总结(之二)--容器的深入研究
- Thinking in Java——第十七章-容器的深入研究之HashMap篇
- 容器的深入研究
- Thinking in Java 第17章 容器深入研究(17.1-17.7)
- Thinking in Java 第17章 容器深入研究(17.8-17.9)
- Thinking in Java 第17章 容器深入研究(17.10-17.14)
- java 编程思想之容器的深入研究
- 现在开始研究java,主攻Think in java 4th
- 《Thinking in Java》十七章_容器深入研究_练习13(Page484)
- xdu 1203 - put on make up 二分答案
- c++中char*和char[]的区别
- 打印1~N的全排列(C++)
- codeforces192 div2
- 不会从网盘下载请进来
- think in java容器深入研究(未获取支持的操作)
- 网络层概念学习之一(基本概念、路由器、选路算法)
- spring+quartz任务定制总结
- 关于IO2IntEnR与EXTPOLAR、EXTMODE等的区别?
- 追记:session和application的区别
- Bittorrent Protocol Specification v1.0 中文
- VMware6上Ubuntu_12.04文件共享
- 计算机中的数学
- ubuntu下中文乱码解决方案(全)