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
  • 相关阅读:
    ios7.0结合storyborad实现页面跳转的总结
    ios上取得设备唯一标志的解决方案
    【iOS】Objective-C简约而不简单的单例模式
    ios应用启动后的自动版本检测方式
    linux安装常用软件和查询基本信息
    配置本地yum仓库
    RedHat 6.5 上将系统语言修改为中文
    RedHat7.4配置yum网络源
    linux环境中,两个不同网段的机器互通
    redhat 配置eth0网卡
  • 原文地址:https://www.cnblogs.com/lcy0515/p/9179739.html
Copyright © 2011-2022 走看看