简述Arrays.asList警示

一个人想着一个人 提交于 2019-12-03 13:31:06

asList方法顾名思义:转换为集合,接收的是Object变动参数——Arrays.asList(Object... a)

示例:

import java.util.Arrays;
import java.util.List;


public class Test47
{

    public static void main(String[] args)
        throws Exception
    {
        int[] data = {5, 4, 3, 2, 1};
        List list = Arrays.asList();
        System.out.println("元素类型:" + list.get(0).getClass());
        System.out.println("前后是否相等:" + list.get(0).equals(data));
        /*
         * 8大基本数据类型不能作为泛型参数,要想作为泛型参数需使用对应的包装类型 返回一个固定长度的列表如 源码: public static <T> List<T>
         * asList(T... a) { return new ArrayList<>(a); }
         */
        System.out.println("列表中的元素数量是:" + list.size());
        /*
         * Arrays.asList方法转换成list对象不可更改即add方法行不通 如 源码Arrays创建了一个静态私有内部类ArrayList,但并未实现add方法
         * 其父类源码所示 public boolean add(E e) { add(size(), e); return true;} 
         * public void add(int index, E element)
         * { throw new UnsupportedOperationException(); }
         */
        list.add(6);
        System.out.println("提示报错");
    }

}

执行结果:

元素类型:class [I
Exception in thread "main" 前后是否相等:true
列表中的元素数量是:1
java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at com.wxp.test.Test47.main(Test47.java:29)

拓展源码Arrays创建了一个静态私有内部类ArrayList的相关方法

size:元素数量

contains:是否包含某元素

replaceAll:集合里全部替换

indexOf:获取某一元素的下标

set:重置指定某一元素

get:获得指定元素

toArray:转换为数组,实现了数组的浅拷贝

参照来源:《编写高质量代码:改善java程序的151建议》

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!