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 问题简介 ...
随机推荐
- [Educational Codeforces Round 63 ] D. Beautiful Array (思维+DP)
Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array time limit per test 2 seconds ...
- Educational Codeforces Round 37-F.SUM and REPLACE (线段树,线性筛,收敛函数)
F. SUM and REPLACE time limit per test2 seconds memory limit per test256 megabytes inputstandard inp ...
- java线程基础巩固---如何实现一个自己的显式锁Lock
拋出synchronized问题: 对于一个方法上了同锁如果被一个线程占有了,而假如该线程长时间工作,那其它线程不就只能傻傻的等着,而且是无限的等这线程工作完成了才能执行自己的任务,这里来演示一下这种 ...
- kotlin命令行交互式终端
之前在http://www.cnblogs.com/webor2006/p/7532982.htmlKotlin的环境搭建篇提到过在开发Kotlin可以用最原始的挖掘机式的命令行去编译运行,这里学习一 ...
- CF 976F 递增容量最大流
给你一个二分图 要求你求出对于k=[0~Mindegree] 每个点的度数至少为k所需要的最少边数 并输出方案 如果是单个询问的话 直接跑一个下界网络流即可 但是有多个询问 重建图强行跑不行 反过来考 ...
- 从Excel中读取数据并批量写入MySQL数据库(基于MySQLdb)
一.Excel内容如下,现在需要将Excel中的数据全部写入的MySQL数据库中: 二.连接MySQL的第三方库使用的是“MySQLdb”,代码如下: # -*- coding:utf-8 -*-im ...
- IDEA 2019.1版本 永久激活(假装是永久激活,其实还是有时间的,不过这个时间比较长)
先下载 一个 jar 包 链接: https://pan.baidu.com/s/12eC8OZzMrUve2xC7aRUKLQ 提取码: bavi 将下载下来的jar包,放置你安装idea的目录的b ...
- Mysql-sql行转列
原始数据如下图所示:(商品的销售明细)date=业务日期:Item=商品名称:saleqty=销售数量 -- 建立测试数据(表)create table test (Date varchar(10), ...
- Oracle查看锁表和解锁
--注意权限问题 1.查看是否有被锁的表: select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a ...
- asp.net实现浏览器大文件分片上传
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...