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 问题简介 ...
随机推荐
- JVM命令jinfo
jinfo也是jvm中参与的一个命令,可以查看运行中jvm的全部参数,还可以设置部分参数. 格式 jinfo [ option ] pid jinfo [ opti ...
- Spring入门篇——第3章 Spring Bean装配(上)
第3章 Spring Bean装配(上) 介绍Bean的作用域.生命周期.Aware接口.自动装配和Resource等内容. 3-1 Spring Bean装配之Bean的配置项及作用域 从上至下依次 ...
- 【Amaple教程】4. 组件
在Amaple单页应用中,一个页面其实存在两种模块化单位,分别是 模块 (am.Module类),它是以web单页应用跳转更新为最小单位所拆分的独立块: 组件 (am.Component类),它的定位 ...
- Beep调用系统声音
using System.Runtime.InteropServices; 引用命名空间 [DllImport("kernel32.dll")]public static ...
- 解决oracle 32位64位的问题
工具-选项-项目和解决方案-勾选第一个
- toggleClass(class|fn[,sw])
toggleClass(class|fn[,sw]) 概述 如果存在(不存在)就删除(添加)一个类.直线电机参数 参数 classStringV1.0 CSS类名 class,switchStri ...
- (五)CWnd 所有窗口类的父类,CFrameWnd,Afx_xxx 全局函数,命名规范
CWnd::MessageBox: 只有CWnd的派生类才可以使用MessageBox 所以应用程序类中使用:AfxMessageBox // 初始化 OLE 库 if (!AfxOleInit()) ...
- 集合家族——ArrayList
一.概述: ArrayList 是实现 List 接口的动态数组,所谓动态就是它的大小是可变的.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些 ...
- 2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic(Kruskal思想)
2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic 题意:有一张图,第i个点被占领需要ai个兵,而每个兵传送至该 ...
- Java 显示锁 之 重入锁 ReentrantLock(七)
ReentrantLock 重入锁简介 重入锁 ReentrantLock,顾名思义,就是支持同一个线程对资源的重复加锁.另外,该锁还支持获取锁时的公平与非公平性的选择. 重入锁 ReentrantL ...