• 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,所以不能做任何修改

     1 import java.util.ArrayList;
     2 import java.util.Arrays;
     3 import java.util.Collection;
     4 import java.util.Collections;
     5 import java.util.List;
     6 
     7 class Unsupported {
     8     static void test(String msg, List<String> list) {
     9         System.out.println("--- " + msg + " ---");
    10         Collection<String> c = list;
    11         Collection<String> subList = list.subList(1, 8);
    12         Collection<String> c2 = new ArrayList<String>(subList);
    13         try {
    14             c.retainAll(c2);
    15             System.out.println("retainAll(): SUCCESS!");
    16         } catch (Exception e) {
    17             System.out.println("retainAll(): " + e);
    18         }
    19         try {
    20             c.removeAll(c2);
    21             System.out.println("removeAll(): SUCCESS!");
    22         } catch (Exception e) {
    23             System.out.println("removeAll(): " + e);
    24         }
    25         try {
    26             c.clear();
    27             System.out.println("clear(): SUCCESS!");
    28         } catch (Exception e) {
    29             System.out.println("clear(): " + e);
    30         }
    31         try {
    32             c.add("X");
    33             System.out.println("add(): SUCCESS!");
    34         } catch (Exception e) {
    35             System.out.println("add(): " + e);
    36         }
    37         try {
    38             c.addAll(c2);
    39             System.out.println("addAll(): SUCCESS!");
    40         } catch (Exception e) {
    41             System.out.println("addAll(): " + e);
    42         }
    43         try {
    44             c.remove("C");
    45             System.out.println("remove(): SUCCESS!");
    46         } catch (Exception e) {
    47             System.out.println("remove(): " + e);
    48         }
    49         try {
    50             list.set(0, "X");
    51             System.out.println("List.set(): SUCCESS!");
    52         } catch (Exception e) {
    53             System.out.println("List.set(): " + e);
    54         }
    55     }
    56 }
    57 
    58 public class Test6 {
    59     public static void main(String[] args) {
    60         List<String> list = Arrays.asList("A B C D E F G H I J K L".split(" "));
    61         Unsupported.test("Modifiable Copy", new ArrayList<String>(list));
    62         Unsupported.test("Arrays.asList()", list);
    63         Unsupported.test("unmodifiableList()", Collections.unmodifiableList(new ArrayList<String>(list)));
    64         // Output:
    65         // --- Modifiable Copy ---
    66         // retainAll(): SUCCESS!
    67         // removeAll(): SUCCESS!
    68         // clear(): SUCCESS!
    69         // add(): SUCCESS!
    70         // addAll(): SUCCESS!
    71         // remove(): SUCCESS!
    72         // List.set(): SUCCESS!
    73         // --- Arrays.asList() ---
    74         // retainAll(): java.lang.UnsupportedOperationException
    75         // removeAll(): java.lang.UnsupportedOperationException
    76         // clear(): java.lang.UnsupportedOperationException
    77         // add(): java.lang.UnsupportedOperationException
    78         // addAll(): java.lang.UnsupportedOperationException
    79         // remove(): java.lang.UnsupportedOperationException
    80         // List.set(): SUCCESS!
    81         // --- unmodifiableList() ---
    82         // retainAll(): java.lang.UnsupportedOperationException
    83         // removeAll(): java.lang.UnsupportedOperationException
    84         // clear(): java.lang.UnsupportedOperationException
    85         // add(): java.lang.UnsupportedOperationException
    86         // addAll(): java.lang.UnsupportedOperationException
    87         // remove(): java.lang.UnsupportedOperationException
    88         // List.set(): java.lang.UnsupportedOperationException
    89     }
    90 }
  • 相关阅读:
    RabbitMQ
    连接池,为什么要使用连接池?
    mac 安装arcanist
    感触
    UDP socket
    Servlet过滤器
    PL、SQL
    springmvc 文件上传实现(不是服务器的)
    注解spring
    excel工具类
  • 原文地址:https://www.cnblogs.com/storml/p/8434357.html
Copyright © 2020-2023  润新知