执行各种添加和移除的方法在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,所以不能做任何修改。

 import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List; 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);
Collection<String> c2 = new ArrayList<String>(subList);
try {
c.retainAll(c2);
System.out.println("retainAll(): SUCCESS!");
} catch (Exception e) {
System.out.println("retainAll(): " + e);
}
try {
c.removeAll(c2);
System.out.println("removeAll(): SUCCESS!");
} catch (Exception e) {
System.out.println("removeAll(): " + e);
}
try {
c.clear();
System.out.println("clear(): SUCCESS!");
} catch (Exception e) {
System.out.println("clear(): " + e);
}
try {
c.add("X");
System.out.println("add(): SUCCESS!");
} catch (Exception e) {
System.out.println("add(): " + e);
}
try {
c.addAll(c2);
System.out.println("addAll(): SUCCESS!");
} catch (Exception e) {
System.out.println("addAll(): " + e);
}
try {
c.remove("C");
System.out.println("remove(): SUCCESS!");
} catch (Exception e) {
System.out.println("remove(): " + e);
}
try {
list.set(0, "X");
System.out.println("List.set(): SUCCESS!");
} catch (Exception e) {
System.out.println("List.set(): " + e);
}
}
} public class Test6 {
public static void main(String[] args) {
List<String> list = Arrays.asList("A B C D E F G H I J K L".split(" "));
Unsupported.test("Modifiable Copy", new ArrayList<String>(list));
Unsupported.test("Arrays.asList()", list);
Unsupported.test("unmodifiableList()", Collections.unmodifiableList(new ArrayList<String>(list)));
// Output:
// --- Modifiable Copy ---
// retainAll(): SUCCESS!
// removeAll(): SUCCESS!
// clear(): SUCCESS!
// add(): SUCCESS!
// addAll(): SUCCESS!
// remove(): SUCCESS!
// List.set(): SUCCESS!
// --- Arrays.asList() ---
// retainAll(): java.lang.UnsupportedOperationException
// removeAll(): java.lang.UnsupportedOperationException
// clear(): java.lang.UnsupportedOperationException
// add(): java.lang.UnsupportedOperationException
// addAll(): java.lang.UnsupportedOperationException
// remove(): java.lang.UnsupportedOperationException
// List.set(): SUCCESS!
// --- unmodifiableList() ---
// retainAll(): java.lang.UnsupportedOperationException
// removeAll(): java.lang.UnsupportedOperationException
// clear(): java.lang.UnsupportedOperationException
// add(): java.lang.UnsupportedOperationException
// addAll(): java.lang.UnsupportedOperationException
// remove(): java.lang.UnsupportedOperationException
// List.set(): java.lang.UnsupportedOperationException
}
}

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. nginx限流&健康检查

    Nginx原生限流模块: ngx_http_limit_conn_module模块 根据前端请求域名或ip生成一个key,对于每个key对应的网络连接数进行限制. 配置如下: http模块   ser ...

  2. Mybatis中运用小技巧 trim标签的使用

    作者:death05的博客推荐:路在脚下trim元素的主要功能是可以在自己包含的内容钱加上某些前缀,也可以在其后加上某写后缀,与之对应的属性是prefix和suffix: 可以把包含内容的首部某些内容 ...

  3. flask调试模式

    想要启用调试模式,发现安装目前网上流行的两种方式均无法在Pycharm中打开调试模式. 1)直接在对象上设置 flask 更新到1.0以后 不支持使用debug =True 来开启调试模式了. Pri ...

  4. Educational Codeforces Round 73 (Rated for Div. 2) A. 2048 Game

    链接: https://codeforces.com/contest/1221/problem/A 题意: You are playing a variation of game 2048. Init ...

  5. SpringBoot——》WebMvcConfigurerAdapter详解

    一.WebMvcConfigurerAdapter是什么二.WebMvcConfigurerAdapter常用的方法1.addInterceptors:拦截器2.addCorsMappings:跨域3 ...

  6. 报错Too many connections

    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establish ...

  7. 2017 ICPC乌鲁木齐 A Coins 概率dp

    Coins 题意:一开始所有n个硬币都是反面朝上的,每次必须拿k个来抛,抛的人足够聪明,问m次之后向上的硬币的期望. 首先说了这个足够聪明的意思,就是只要向反面的有k个就不会sb地去拿向正面的来抛,想 ...

  8. gitlab使用指南

    gitlab是公司内部搭建的用于管理代码项目的类似于github的系统. 登录注册 注册时使用的名称和邮箱请按照公司内部格式进行信息填写. 在注册完成以后有可能会向邮箱里发送一个注册邮件,如果要求发送 ...

  9. 用HQL自己写了个update!!!

    原来代码: public void updateSj(String jsly, Integer zu,String sj) { if (!StringUtils.isBlank(jsly)&& ...

  10. cookies ,session,localstorage讲解

    一 .cookie (1)简介 因为HTTP协议是无状态的,服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现.在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料.最 ...