Java集合(4):未获支持的操作及UnsupportedOperationException
执行各种添加和移除的方法在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的更多相关文章
- java集合(3)-Java8新增的Stream操作集合
Java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素.上面的4个接口中,Stream是一个通用的 ...
- java集合(3)-Java8新增的Predicate操作集合
Java8起为Collection集合新增了一个removeIf(Predicate filter)方法,该方法将批量删除符合filter条件的所有元素.该方法需要一个Predicate(谓词)对象作 ...
- Java集合(0):概述
下面是一个Java集合的简化图,我们可以看出,集合分Collection和Map两大部分: 接下来分别以下面几个章节介绍Java集合: Java集合(1):Collections工具类中的static ...
- 【java集合系列】---HashSet
在前面的博文中,小编主要简单介绍了java集合中的总体框架,以及list接口中典型的集合ArrayList和LinkedList,接着,我们来看set的部分集合,set集合和数学意义上的集合没有差别, ...
- Java—集合框架 Collections.sort()、Comparable接口和Comparator接口
Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set ...
- JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue
前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...
- (未完)Java集合框架梳理(基于JDK1.8)
Java集合类主要由两个接口Collection和Map派生出来的,Collection派生出了三个子接口:List.Set.Queue(Java5新增的队列),因此Java集合大致也可分成List. ...
- java集合框架工具类Collections,集合的操作
1 import java.util.*; public class asList { public static void main(String args[]) { // int arr[] = ...
- Java创建List、Map等集合对象的同时进行赋值操作
title: Java创建List.Map等集合对象的同时进行赋值操作 date: 2019-11-28 23:25:47 tags: JavaSE categories: JavaSE 问题简介 ...
随机推荐
- IPV4和IPV6的划分
IP(Internet Protocol,网络互联协议)地址就是连接互联网的主机被分配或指派的一段数字标识,是传输报文组装时最重要的组成部分,用来在互联网中数据传输时标识源和目标主机. IPv4 IP ...
- springboot请求体中的流只能读取一次的问题
场景交代 在springboot中添加拦截器进行权限拦截时,需要获取请求参数进行验证.当参数在url后面时(queryString)获取参数进行验证之后程序正常运行.但是,当请求参数在请求体中的时候, ...
- python pip 'nonetype' object has no attribute 'bytes'
python pip 'nonetype' object has no attribute 'bytes' 更新 pip for Windows : python -m pip install -U ...
- ThreadPoolExecutor源码分析二
接上文,这里继续分析源码 private static final int COUNT_BITS = Integer.SIZE - 3; private static final int CAPA ...
- 如何用 tensorflow serving 部署服务
第一步,读一读这篇博客 https://www.jb51.net/article/138932.htm (浅谈Tensorflow模型的保存与恢复加载) 第二步: 参考博客: https://blog ...
- element ui的表格列设置fixed后做动态表格出现表格错乱
最近使用element-UI时,使用table做动态表格,当操作列使用fixed时,动态切换表格列设置设置时就会出现错乱,情况如下: 解决方法: 把el-table-column上的key设成一个随机 ...
- python第三方库安装
如安装jieba分词库 代码对Python 2/3均兼容 全自动安装:easy_install jieba或者pip install jieba / pip3 install jieba 半自动安装: ...
- http method
get: 获取资源get方法用来请求访问已被URL识别的资源 post: 传输实体主体POST方法用来传输实体的主体 put: 传输文件PUT方法用来传输文件. head: 获取报文首部head方法与 ...
- 一个轻量级的模态组件,“礼貌地”要求您的用户停止使用过时的IE浏览器
插件github地址:https://github.com/panteng/ie-blocker 我们在做项目时,会考虑到浏览器的兼容问题,当然做,全浏览器都支持的项目我还没经历过,也不想经历,目前做 ...
- HDU 5705 Clock(2016杭电女生专场1004)——角度追及问题
题意是给出一个当前的时间和角度a,问从现在开始的下一个时针和分针形成角度a的时间是多少,时间向下取整. 分析:时针3600s走30°,故120s走1°,分针3600s走360°,故10s走1°,那么每 ...