zoukankan      html  css  js  c++  java
  • 将数组转换成集合,不可进行add和remove操作

    直接上代码:

    import java.util.Arrays;
    import java.util.List;
    
    public class Test {
        public static void main(String[] args) {  
            Integer a[] = {1,2,5,6,9};
            List<Integer> list = Arrays.asList(a);
            System.out.println(list.size());
            list.add(3);
            System.out.println(list.size());
        }
    }

    运行结果:


    官方文档解释:

    asList
    public static <T> List<T> asList(T... a)
    返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess。
    此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:
    List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
    参数:
    a - 支持列表的数组。
    返回:
    指定数组的列表视图。



    asList的实现如下:

        @SafeVarargs
        @SuppressWarnings("varargs")
        public static <T> List<T> asList(T... a) {
            return new ArrayList<>(a);

        }


    用asList转换的代码是返回List的实现类ArrayList集合对象

    但是集合大小固定,无法添加和删除

    如果想要将数组转换成一个可以具有正常添加和删除操作的List话,

    一种情况就是遍历数组,一个个添加到list中

    或者用Collections.addAll(list, a);


    文档显示:

    addAll
    public static <T> boolean addAll(Collection<? super T> c,
                                     T... elements)
    将所有指定元素添加到指定 collection 中。可以分别指定要添加的元素,或者将它们指定为一个数组。此便捷方法的行为与 c.addAll(Arrays.asList(elements)) 的行为是相同的,但在大多数实现下,此方法运行起来可能要快得多。
    在分别指定元素时,此方法提供了将少数元素添加到现有 collection 中的一个便捷方式:

         Collections.addAll(flavors, "Peaches 'n Plutonium", "Rocky Racoon");
     
    参数:
    c - 要插入 elements 的 collection
    elements - 插入 c 的元素
    返回:
    如果 collection 由于调用而发生更改,则返回 true
    抛出:
    UnsupportedOperationException - 如果 c 不支持 add 操作
    NullPointerException - 如果 elements 包含一个或多个 null 值并且 c 不允许使用 null 元素,或者 c 或 elements 为 null
    IllegalArgumentException - 如果 elements 中值的某个属性不允许将它添加到 c 中
    从以下版本开始:
    1.5
    另请参见:

    Collection.addAll(Collection)


    文档写出如果第一个参数集合c如果不支持add操作仍然抛出UnsupportedOperationException,就比如刚刚用一个数组List<Integer> list = Arrays.asList(a);此时的list不允许add操作,会抛出UnsupportedOperationException,同样的,此时再进行Collections.addAll(list, a);也是会抛出UnsupportedOperationException。

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    public class Test {
        public static void main(String[] args) {  
            Integer a[] = {1,2,5,6,9};
            List<Integer> list = new ArrayList<>();
            System.out.println(list.size());
            Collections.addAll(list, a);
            list.add(3); // 此时的添加是可以成功的
            System.out.println(list.size());
        }
    }

    运行结果:


    ========================================Talk is cheap, show me the code=======================================

    CSDN博客地址:https://blog.csdn.net/qq_34115899
  • 相关阅读:
    pat 甲级 1065. A+B and C (64bit) (20)
    pat 甲级 1064. Complete Binary Search Tree (30)
    pat 甲级 1010. Radix (25)
    pat 甲级 1009. Product of Polynomials (25)
    pat 甲级 1056. Mice and Rice (25)
    pat 甲级 1078. Hashing (25)
    pat 甲级 1080. Graduate Admission (30)
    pat 甲级 团体天梯 L3-004. 肿瘤诊断
    pat 甲级 1099. Build A Binary Search Tree (30)
    Codeforce 672B. Different is Good
  • 原文地址:https://www.cnblogs.com/lcy0515/p/9179739.html
Copyright © 2011-2022 走看看