执行各种添加和移除的方法在Collection中都是可选操作的,这意味着实现类并不需要为这些方法提供实现。当我们调用这些方法时,将不会执行有意义的行为,而是通常抛出UnsupportedOperationException。

下面例子我们可以看出Collection的各种实现类中:

(1) java.util.ArrayList实现了所有Collection接口。

(2) java.util.Arrays.ArrayList不支持对对象的add,remove,clear,但是支持set修改元素值。这是因为Arrays.asList返回固定尺寸的List。

(3) java.util.Collections.UnmodifiableList产生的是read-only的List,所以不能做任何修改。

  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Collection;
  4. import java.util.Collections;
  5. import java.util.List;
  6.  
  7. class Unsupported {
  8. static void test(String msg, List<String> list) {
  9. System.out.println("--- " + msg + " ---");
  10. Collection<String> c = list;
  11. Collection<String> subList = list.subList(1, 8);
  12. Collection<String> c2 = new ArrayList<String>(subList);
  13. try {
  14. c.retainAll(c2);
  15. System.out.println("retainAll(): SUCCESS!");
  16. } catch (Exception e) {
  17. System.out.println("retainAll(): " + e);
  18. }
  19. try {
  20. c.removeAll(c2);
  21. System.out.println("removeAll(): SUCCESS!");
  22. } catch (Exception e) {
  23. System.out.println("removeAll(): " + e);
  24. }
  25. try {
  26. c.clear();
  27. System.out.println("clear(): SUCCESS!");
  28. } catch (Exception e) {
  29. System.out.println("clear(): " + e);
  30. }
  31. try {
  32. c.add("X");
  33. System.out.println("add(): SUCCESS!");
  34. } catch (Exception e) {
  35. System.out.println("add(): " + e);
  36. }
  37. try {
  38. c.addAll(c2);
  39. System.out.println("addAll(): SUCCESS!");
  40. } catch (Exception e) {
  41. System.out.println("addAll(): " + e);
  42. }
  43. try {
  44. c.remove("C");
  45. System.out.println("remove(): SUCCESS!");
  46. } catch (Exception e) {
  47. System.out.println("remove(): " + e);
  48. }
  49. try {
  50. list.set(0, "X");
  51. System.out.println("List.set(): SUCCESS!");
  52. } catch (Exception e) {
  53. System.out.println("List.set(): " + e);
  54. }
  55. }
  56. }
  57.  
  58. public class Test6 {
  59. public static void main(String[] args) {
  60. List<String> list = Arrays.asList("A B C D E F G H I J K L".split(" "));
  61. Unsupported.test("Modifiable Copy", new ArrayList<String>(list));
  62. Unsupported.test("Arrays.asList()", list);
  63. Unsupported.test("unmodifiableList()", Collections.unmodifiableList(new ArrayList<String>(list)));
  64. // Output:
  65. // --- Modifiable Copy ---
  66. // retainAll(): SUCCESS!
  67. // removeAll(): SUCCESS!
  68. // clear(): SUCCESS!
  69. // add(): SUCCESS!
  70. // addAll(): SUCCESS!
  71. // remove(): SUCCESS!
  72. // List.set(): SUCCESS!
  73. // --- Arrays.asList() ---
  74. // retainAll(): java.lang.UnsupportedOperationException
  75. // removeAll(): java.lang.UnsupportedOperationException
  76. // clear(): java.lang.UnsupportedOperationException
  77. // add(): java.lang.UnsupportedOperationException
  78. // addAll(): java.lang.UnsupportedOperationException
  79. // remove(): java.lang.UnsupportedOperationException
  80. // List.set(): SUCCESS!
  81. // --- unmodifiableList() ---
  82. // retainAll(): java.lang.UnsupportedOperationException
  83. // removeAll(): java.lang.UnsupportedOperationException
  84. // clear(): java.lang.UnsupportedOperationException
  85. // add(): java.lang.UnsupportedOperationException
  86. // addAll(): java.lang.UnsupportedOperationException
  87. // remove(): java.lang.UnsupportedOperationException
  88. // List.set(): java.lang.UnsupportedOperationException
  89. }
  90. }

Java集合(4):未获支持的操作及UnsupportedOperationException的更多相关文章

  1. java集合(3)-Java8新增的Stream操作集合

    Java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素.上面的4个接口中,Stream是一个通用的 ...

  2. java集合(3)-Java8新增的Predicate操作集合

    Java8起为Collection集合新增了一个removeIf(Predicate filter)方法,该方法将批量删除符合filter条件的所有元素.该方法需要一个Predicate(谓词)对象作 ...

  3. Java集合(0):概述

    下面是一个Java集合的简化图,我们可以看出,集合分Collection和Map两大部分: 接下来分别以下面几个章节介绍Java集合: Java集合(1):Collections工具类中的static ...

  4. 【java集合系列】---HashSet

    在前面的博文中,小编主要简单介绍了java集合中的总体框架,以及list接口中典型的集合ArrayList和LinkedList,接着,我们来看set的部分集合,set集合和数学意义上的集合没有差别, ...

  5. Java—集合框架 Collections.sort()、Comparable接口和Comparator接口

    Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set ...

  6. JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

  7. (未完)Java集合框架梳理(基于JDK1.8)

    Java集合类主要由两个接口Collection和Map派生出来的,Collection派生出了三个子接口:List.Set.Queue(Java5新增的队列),因此Java集合大致也可分成List. ...

  8. java集合框架工具类Collections,集合的操作

    1 import java.util.*; public class asList { public static void main(String args[]) { // int arr[] = ...

  9. Java创建List、Map等集合对象的同时进行赋值操作

    title: Java创建List.Map等集合对象的同时进行赋值操作 date: 2019-11-28 23:25:47 tags: JavaSE categories: JavaSE 问题简介   ...

随机推荐

  1. IPV4和IPV6的划分

    IP(Internet Protocol,网络互联协议)地址就是连接互联网的主机被分配或指派的一段数字标识,是传输报文组装时最重要的组成部分,用来在互联网中数据传输时标识源和目标主机. IPv4 IP ...

  2. springboot请求体中的流只能读取一次的问题

    场景交代 在springboot中添加拦截器进行权限拦截时,需要获取请求参数进行验证.当参数在url后面时(queryString)获取参数进行验证之后程序正常运行.但是,当请求参数在请求体中的时候, ...

  3. python pip 'nonetype' object has no attribute 'bytes'

    python pip 'nonetype' object has no attribute 'bytes' 更新 pip for Windows : python -m pip install -U ...

  4. ThreadPoolExecutor源码分析二

      接上文,这里继续分析源码 private static final int COUNT_BITS = Integer.SIZE - 3; private static final int CAPA ...

  5. 如何用 tensorflow serving 部署服务

    第一步,读一读这篇博客 https://www.jb51.net/article/138932.htm (浅谈Tensorflow模型的保存与恢复加载) 第二步: 参考博客: https://blog ...

  6. element ui的表格列设置fixed后做动态表格出现表格错乱

    最近使用element-UI时,使用table做动态表格,当操作列使用fixed时,动态切换表格列设置设置时就会出现错乱,情况如下: 解决方法: 把el-table-column上的key设成一个随机 ...

  7. python第三方库安装

    如安装jieba分词库 代码对Python 2/3均兼容 全自动安装:easy_install jieba或者pip install jieba / pip3 install jieba 半自动安装: ...

  8. http method

    get: 获取资源get方法用来请求访问已被URL识别的资源 post: 传输实体主体POST方法用来传输实体的主体 put: 传输文件PUT方法用来传输文件. head: 获取报文首部head方法与 ...

  9. 一个轻量级的模态组件,“礼貌地”要求您的用户停止使用过时的IE浏览器

    插件github地址:https://github.com/panteng/ie-blocker 我们在做项目时,会考虑到浏览器的兼容问题,当然做,全浏览器都支持的项目我还没经历过,也不想经历,目前做 ...

  10. HDU 5705 Clock(2016杭电女生专场1004)——角度追及问题

    题意是给出一个当前的时间和角度a,问从现在开始的下一个时针和分针形成角度a的时间是多少,时间向下取整. 分析:时针3600s走30°,故120s走1°,分针3600s走360°,故10s走1°,那么每 ...