• 【转】java.util.Arrays.asList 的用法


    DK 1.4对java.util.Arrays.asList的定义,函数参数是Object[]。所以,在1.4中asList()并不支持基本类型的数组作参数。

     JDK 1.5中,java.util.Arrays.asList的定义,函数参数是Varargs, 采用了泛型实现。同时由于autoboxing的支持,使得可以支持对象数组以及基本类型数组。

     不过在使用时,当传入基本数据类型的数组时,会出现小问题,会把传入的数组整个当作返回的List中的第一个元素,例如:

    public static void main(String[] args){

        int[] a1 = new int[]{1,2,3};
        String[] a2 = new String[]{"a","b","c"};
          
        System.out.println(Arrays.asList(a1));
        System.out.println(Arrays.asList(a2));
    }
     
    打印结果如下:
    [[I@dc8569]
    [a, b, c]
     
    下面说说Arrays.asList()的返回值:
    JDK1.6中文 文档是这么说的(1.8没什么改变):
    public static <T> List<T> asList(T... a)
    返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直接写”到数组。)此方法同 Collection.toArray() 一起,充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess

    此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:

         List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
     
    参数:
    a - 支持列表的数组。
    返回:
    指定数组的列表视图。

    我们都知道,List的一个典型的特性就是其长度是可变的,我们可以很方便地对它进行插入和删除元素的操作,这是它与数组所存在的一个很大的区别,后者的长度是固定的,而且我们不能从数组中删除元素,只能修改元素的值。利用Arrays.asList(array)将返回一个List,然而这个返回的List并不支持add和remove的操作。

    这是什么原因呢?

    Arrays.asList源码:

     
    public static <T> List<T> asList(T... a) {
       return new ArrayList<T>(a);
    }

    这里的ArrayList并不是java.util.ArrayList,而是Arrays的内部类:

     

    我们可以看到该内部类继承的是AbstractList,下面是AbstractList的add和remove方法源码:

    public boolean add(E e) {
        add(size(), e);
        return true;
    }
      
    public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }
      
    public E remove(int index) {
        throw new UnsupportedOperationException();
    }

    所以,当我们对Arrays.asList返回的List进行添加或删除时将会报 java.lang.UnsupportedOperationException 异常。

     

    来源:http://www.cnblogs.com/zolra/archive/2011/03/02/1969235.html

  • 相关阅读:
    5.4 省选模拟赛 修改 线段树优化dp 线段树上二分
    一本通 高手训练 1782 分层图 状压dp
    luogu P3830 [SHOI2012]随机树 期望 dp
    5.2 省选模拟赛 或许 线型基
    luogu P4562 [JXOI2018]游戏 组合数学
    一本通 高手训练 1781 死亡之树 状态压缩dp
    luogu P4726 【模板】多项式指数函数 多项式 exp 牛顿迭代 泰勒展开
    4.28 省选模拟赛 负环 倍增 矩阵乘法 dp
    HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内
    一本通 高手训练 1763 简单树 可持久化线段树 树链刨分 标记永久化
  • 原文地址:https://www.cnblogs.com/thinkingandworkinghard/p/6180263.html
Copyright © 2020-2023  润新知