执行各种添加和移除的方法在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. C#实现10进制转2进制

    这几天在复习计算机原理,看到二进制忽然想到二进制转10进制的公式,然后转念一想10进制转二进制的公式好像没印象,那索性自己写出来. 结果学渣的我发现,并不能写出来!什么数列,对数,xx函数忘得一干二净 ...

  2. adreno的tbdr

    看完apple的(&&powervr) 再来撸高通的.. FlexRender 能自己选三种模式 Direct Binning 这个只是分块 HWVizBinning 这个估计就是tb ...

  3. mongodb的安装与使用(二)之 增删改查与索引

    0.MongoDB数据库和集合创建与删除 MongoDB 创建数据库 语法: use DATABASE_NAME note:查看所有数据库使用show dbs 创建的空数据库 test并不在数据库的列 ...

  4. 《Redis 设计与实现》读书笔记(三)

    多机数据库实现 十五 .复制 从服务器通过命令 slaveof 127.0.0.1 6000 成为主服务器的从服务器.然后执行复制操作,保持自己的状态和主服务器一样 1.理论 同步 成为从服务器后的同 ...

  5. python mysql插入中文乱码

    # "INSERT INTO" 语句sql = "INSERT INTO sites (name, url, status, enable) VALUES (%s, %s ...

  6. Win7 : 'java' is not recognized as internal or external command,

    Java application is not working in Win 7 64-bit http://answers.microsoft.com/en-us/windows/forum/win ...

  7. (六)绘图,文本编程,定时器,菜单,图标icon,消息类型

    1,简单绘图 画直线 a,鼠标按下和抬起 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代 ...

  8. C语言基础语法之指向函数的指针

    指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一 ...

  9. 一 、Linux基础命令及使用帮助

    linux的哲学思想: 一切皆文件: 把几乎所有资源,包括硬件设备都组织为文件系统 由众多单一目的小程序组成:一个程序只实现一个功能,而且要做好 组合小程序完成复杂任务 尽量避免跟用户交互 目的:实现 ...

  10. JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法

    本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...