Arrays使用asList方法的坑

博客讨论了Arrays.asList方法在处理基本数据类型数组时的局限性,指出它会将基本类型数组视为单一对象,导致无法直接转换为Integer列表。此外,由asList创建的ArrayList是Arrays的静态内部类,不支持所有List操作。建议使用CollectionUtils.arrayToList方法(适用于基本类型)、JDK8的流转换(支持增删改操作)或手动遍历插入来替代,具体选择取决于需求和JDK版本。
摘要由CSDN通过智能技术生成

话不多说:直接上代码:

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

/**
 * @author yh128
 * @version 1.0.0
 * @ClassName JavaUtilLearn.java
 * @Description 基础练习
 * @Param
 * @createTime 2019年06月11日 09:37:00
 */
public class JavaUtilLearn {
    public static void main(String[] args) {
        new JavaUtilLearn().intAsList();
        System.out.println("----------------------------------------------");
        new JavaUtilLearn().stringAsList();
    }

    /**
     * 整型数组使用Arrays里面的asList方法
     */
    public void intAsList() {
        Integer[] arr = {1, 2, 3};
        List<Integer> ints = Arrays.asList(arr);
        System.out.println("使用封装类型转换:" + ints.size());
        int[] intArr = {1, 2, 3};
        List<int[]> ints1 = Arrays.asList(intArr);
        System.out.println("使用基础基本类型转换:" + ints1.size());

    }

    /**
     * 字符串数组使用Arrays里面的asList方法
     */
    public void stringAsList() {
        String[] arr = {"我", "喜欢", "学习"};
        List<String> strings = Arrays.asList(arr);
        System.out.println("转换后的数据是:" + strings.toString());
        arr[1] = "爱";
        System.out.println("转换后修改原来的数组:" + strings.toString());
        strings.set(1, "渴望");
        System.out.println("转换后的数据在1的位置复制一个字符串:" + strings.toString());
        System.out.println("原来数组的值是:");
        for (String s : arr) {
            System.out.print(s + " ");
        }
        strings.add("的人");
        strings.remove("渴望");
        System.out.println("新增后删除的数据:" + strings.toString());
    }

}

然后看一下结果:

通过结果可以发现使用基本数据类型的数组转化的时候他吧int[]当成了一个类型(因为指定的类型不能是基本数据类型,但是可以为基本数据的数组,他不会默认转成Integer类型的List),但是使用封装类型就正常使用,但是如果数组修改了list也是跟着修改的,list修改了数据也会被修改,但是如果list想要删除和新增元素那就会报错,因为asList方法生成的ArrayList不是java.util.ArrayList,而是 java.util.Arrays.ArrayList,是Arrays的静态内部类,没有实现List的所有方法,所以很多方法都不可用的。并且转化后的list长度是不可变的。

总结以及建议:

1、如果长度不变可以使用,但是有基本类型就不要使用了。

2、可以使用CollectionUtils的arrayToList方法,支持基本数据类型的数组,但是也是不可新增和删除的。

(CollectionUtils是org.springframework.util.CollectionUtils包下面的哦)

3、使用JDK8的,这个就既支持基本数据类型也支持增删改操作,但是要jdk8哦j或者jdk8以上

int[] intArr = {1, 2, 3};
List<Integer> list  = Arrays.stream(intArr).boxed().collect(Collectors.toList());

4、如果没有基本数据类型但是要新增删除就可以使用一下方法:

Integer[] arr = {1, 2, 3};
List<Integer> lists = new ArrayList<>();
Collections.addAll(lists, arr);

5、有基本数据类型还有新增删除就可以自己遍历插入了(回到原始的方法)

 int[] intArr = {1, 2, 3};
 List<Integer> lists = new ArrayList<>();
 for (int i = 0; i < intArr.length; i++) {
     lists.add(intArr[i]);
 }

以上是我的总结和个人的见解,如果有更好的方法可以加在评论中哦,谢谢!

 

《………………………………………………菜鸟起飞中,请各位走过路过的多多指教……………………………………》

                                                                        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值