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
  • 相关阅读:
    同时使用gitee和github
    vim的四种模式及模式切换
    Vim使用入门
    Vim, Vim Diff, Vim Easy, Vim Read-only 区别
    公钥与私钥
    Linux使用Aria2命令下载BT种子/磁力/直链文件
    Content-Type /AJAX /@ResponseBody
    IDEA 添加serialVersionUID 检查
    Servlet中的Context Path | Servlet Path | Path Info
    第K大的数
  • 原文地址:https://www.cnblogs.com/lcy0515/p/9179739.html
Copyright © 2011-2022 走看看