Array数组与ArrayList的转换及坑!

本文探讨了在Java中如何进行Array与ArrayList之间的转换。ArrayList转Array操作直接,而Array转ArrayList需要注意,使用Arrays.asList()生成的List不允许增加或删除元素,且与原数组关联。为避免这些问题,当需要修改List大小时,需要额外处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Array与ArrayList的转换

创建数组和List

        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");

        String[] arr = {"3","4"};

ArrayList转Array

这没什么好说的,就是:

        // array转arraylist
        String[] listToArr = list.toArray(new String[0]);

Array转ArrayList(有坑)

最常见的方法(不能增加或删除元素):

        // arraylist转array
        List<String> arrToList = Arrays.asList(arr);

但这个方法有几个问题:

  1. 生成的list是固定大小的,增加或删除元素会有一个runtime error: UnsupportedOperationException. 如果有增删的需求
  2. 原数组与新生成的List是关联的。修改原数组或list中的元素,另一个中的元素也会被修改。

如果需要修改list大小,应该像下面这样再套一层。

        // arraylist转array
        List<String> arrToList = Arrays.asList(arr);

原因

通过Arrays.asList()生成的ArrayList其实是在Arrays类里定义的内部类,这个内部类继承了AbstractList,这个内部类实现了一部分Collection中的一部分方法,但是没有实现任何会修改list大小的方法。
这个内部类中值储存在一个final修饰的数组中,所以也不可能再指向其他size的数组了

private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {
        private final E[] a;

        ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值