Java集合: asList 的缺陷

Arrays.toList(T t) 方法在开发中用起来非常方便, 却存在几个缺陷…

1. 不要使用8种基本数据类型数组转换为集合

在这里插入图片描述

2. asList产生的集合不可操作(不可以做出结构上的改变)

在这里插入图片描述
在这里插入图片描述
从报错信息看到, 在 44 行(list.add(5)) 抛出了 java.lang.UnsupportedOperationException 异常, 让人诧异的是, list做一个插入操作, 居然报错了, 难道 List 都不支持add() 操作了? 看一下 asList 源码试试
在这里插入图片描述
那就继续 java.util.Arrays.ArrayList 的源码
在这里插入图片描述
创建 ArrayList 对象时, 调用了 Objects 工具类中的 requireNonNull 方法, 源码如下
在这里插入图片描述
从上述源码中可以看到, 返回的实际上是 T 类型的值, T 是什么和传入的参数一致,这里可以看得出了, asList 方法返回的, 实际上是穿着 List 的衣服, 但是在 Arrays 的静态内部类 ArrayList 中, 提供了 size()、 get()等等方法, 但是 add()、remove()等方法, 是继承于 AbstractList 中的方法, 那么看一下这个源码
在这里插入图片描述
在这里插入图片描述
可以看到, 在 调用 add() 方法时,直接抛出了 java.lang.UnsupportedOperationException异常, 同时也验证了第三章图中
在这里插入图片描述
最终发生异常类是在 AbstractList 的 148 行


3. 解决 Arrays.toList(T t) 缺陷的办法:

使用 Collections.addAll(List, array);

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值