zoukankan      html  css  js  c++  java
  • 【转】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

  • 相关阅读:
    算法---递归及尾递归
    ScheduledThreadPoolExecutor之remove方法
    数据结构---队列及简单实现有界队列
    数据结构---栈及四则运算实现
    数据结构---链表及约瑟夫环问题带来的思考
    数据结构---数组
    时间复杂度和空间复杂度
    Redis缓存设计与性能优化
    Springboot+ELK实现日志系统简单搭建
    Docker学习笔记(三):Dockerfile及多步骤构建镜像
  • 原文地址:https://www.cnblogs.com/thinkingandworkinghard/p/6180263.html
Copyright © 2011-2022 走看看