Arrays.asList()你不知道的知识点

Arrays.asList()你不知道的知识点

Arrays.asList():返回指定数组支持的固定大小列表
一、Arrays.asList()的用法

相信绝大部分的人,应该都是用个这种方法吧数组转换成List集合的

那你知不知道,其实不是所有数据类型的数组都可以使用Arrays.asList(),转换成List?

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

通过这个方法可以看出来,Arrays.asList()只能接受泛型的实参

泛型:

泛型要求是对象类型,而基本数据类型在Java中不属于对象。但是基本数据类型有其封装类,且为对象类型。

所以,基本数据类型是不可以使用这个方法转List的。

        Integer[]integer = new Integer[3];
        integer[0]=1;
        integer[1]=2;
        integer[2]=3;

        int[] i={1,2,3};

        List<Integer> integers = Arrays.asList(integer);
        List int1 = Arrays.asList(i);
        System.out.println("integer类型:"+integers.toString()+"数据大小:"+integers.size());
        System.out.println("int类型:"+int1.toString()+"数据大小:"+int1.size());

输出结果:

integer类型:[1, 2, 3]数据大小:3
int类型:[[I@1540e19d]数据大小:1 //获取不到数组元素,且数组size为1
二、List对某个index的值做修改,数组对应的值也会被修改
   Integer[]integer = new Integer[3];
        integer[0]=1;
        integer[1]=2;
        integer[2]=3;

        List<Integer> integers = Arrays.asList(integer);
        integers.set(0,10);
        System.out.println("integer类型:"+integers.toString()+"数据大小:"+integers.size());
        System.out.println(integer[0]);

结果输出:

integer类型:[10, 2, 3]数据大小:3
10

其实已经可以得出结论,Arrays.asList(integer),转换的List其实和Integer数组使用的是同一空间

三、使用Arrays.asList()定长的,不能做增加和删除元素

因为Arrays.asList返回的ArrayList不是咱们平时常用的java.util包下的ArrayList,而是Arrays类下的一个静态内部类,恰巧名字也叫ArrayList,由于这个内部类没有重写add和remove方法,所以不能进行增加和删除的操作

       Integer[]integer = new Integer[3];
        integer[0]=1;
        integer[1]=2;
        integer[2]=3;

        List<Integer> integers = Arrays.asList(integer);
        System.out.println("integer类型:"+integers.toString()+"数据大小:"+integers.size());
        integers.add(100);
        System.out.println("integer类型:"+integers.toString()+"数据大小:"+integers.size());

输出结果

integer类型:[1, 2, 3]数据大小:3
Exception in thread "main" java.lang.UnsupportedOperationException

那么如何解决这个问题呢?

可以使用new ArrayList<>把 Arrays.asList()传进去,使用ArrayList来操作

List<Integer> integers = new ArrayList<>(Arrays.asList(integer)); //使用new ArrayList<>()
        System.out.println("integer类型:"+integers.toString()+"数据大小:"+integers.size());
        integers.add(100);
        System.out.println("integer类型:"+integers.toString()+"数据大小:"+integers.size());
integer类型:[1, 2, 3]数据大小:3
integer类型:[1, 2, 3, 100]数据大小:4
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值