再巩固理解一下Arrays.asList()方法

Arrays.asList()

在写代码过程中也有用到将数组或其他元素转换成集合的操作。但是这个方法转换后的集合需要有一些注意的地方。

之前看过,但是时间长也有点模糊了,记下来再巩固一下。
下面看例子:
首先搞出一个字符串转换为集合

public static void main(String[] args) {
        String a = "1,2,3";
        List<String> stringList = Arrays.asList(a);
        System.out.println(stringList);
   }

输出结果为: [1,2,3]  是没有问题的

但是这个转换后的集合不能进行一些操作 比如对集合的add、remove操作:

public static void main(String[] args) {
        String a = "1,2,3";
        List<String> stringList = Arrays.asList(a);
        // 使用add 方法
		stringList.add(3,"4");
        // 或者下面这个remove方法
		stringList.remove(0);
        System.out.println(stringList);
   }

都会抛出异常:
Exception in thread "main" java.lang.UnsupportedOperationException.....

原因就在这个asList()方法里
点进方法里可以看到如下:
在这里插入图片描述
虽然方法里 也是new 了一个 ArrayList,但是这个ArrayList位置处于
java.util.Arrays.ArrayList
是一个固定长度集合。
这个位置和平常直接new 出来的ArrayList不同 ,并非直接处于util包下。
(new ArrayList(); ---- 位置处于 java.util.ArrayList)

这个地方的ArrayList方法如下:
在这里插入图片描述
继承AbstractList,实现了RandomAccess, java.io.Serializable
进入到所继承的 AbstractList里面最上面所说的 add,remove方法抛异常的地方就在这里:
在这里插入图片描述
因此 通过asList() 方法转换后的list 用来遍历还是可以的。

还有一种情况:

    public static void main(String[] args) {
        int[] arr = {1,2,3};
        List<int[]> ints = Arrays.asList(arr);
    }
    并不能输出想要的集合,因为int基础类型不能泛型化()
    会把arr当成一个元素输出  ([[I@19469ea2])

可以使用这种方法转换集合:
java集合不存储基本类型,boxed方法用于把流转换为集合
 public static void main(String[] args) {
        int[] arr = {1,2,3};
        List<Integer> collect = Arrays.stream(arr).boxed().collect(Collectors.toList());
        System.out.println(collect);
   }
  输出结果:[1, 2, 3]

或者说 直接用包装类定义  然后进行asList转换集合方法也可:
 public static void main(String[] args) {
     Integer[] arr1 = {4,5,6};
     List<Integer> integers = Arrays.asList(arr1);
     System.out.println(integers);
    }
输出结果: [4, 5, 6]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值