为什么阿里巴巴开发手册明确说明 Arrays.asList() 不能使用其修改方法
点击上方“方志朋”,选择“设为星标”
回复”666“获取新整理的面试资料
来源:juejin.im/post/5d10e52ee51d454f6f16ec11
引语:
问题分析:
总结:
引语:
阿里巴巴java开发规范说到使用工具类Arrays.asList()方法把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException(),我们来看一下为什么会出现这种情况.
问题分析:
我们做个测试
public static void main(String[] args) {List<String> list = Arrays.asList("a", "b", "c");// list.clear();// list.remove("a");// list.add("g");}
被注释的三行可以分别解开注释,运行后确实出现了规约中所说的异常.我们来看下Arrays.asList()做了什么操作.
public static <T> List<T> asList(T... a) {return new ArrayList<>(a);}
看上去是个很正常的方法,然而实际上你点进到ArrayList发现,其实ArrayList并不是我们平时用的ArrayList.
private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable{private static final long serialVersionUID = -2764017481108945198L;private final E[] a;ArrayList(E[] array) {a = Objects.requireNonNull(array);}@Overridepublic int size() {return a.length;}@Overridepublic Object[] toArray() {return a.clone();}@Override@SuppressWarnings("unchecked")public <T> T[] toArray(T[] a) {int size = size();if (a.length < size)return Arrays.copyOf(this.a, size,(Class<? extends T[]>) a.getClass());System.arraycopy(this.a, 0, a, 0, size);if (a.length > size)a[size] = null;return a;}// 后面省略了
而是Arrays里面的一个内部类.而且这个内部类没有add,clear,remove方法,所以抛出的异常其实来自于AbstractList.
public void add(int index, E element) {throw new UnsupportedOperationException();}public E remove(int index) {throw new UnsupportedOperationException();}
点进去就会发现抛出异常的地方,clear底层也会调用到remove所以也会抛出异常.
总结:
1.Arrays.asList()不要乱用,底层其实还是数组;
2.如果使用了Arrays.asList()的话,最好不要使用其集合的操作方法;
List list = new ArrayList<>(Arrays.asList("a", "b", "c"))可以在外面这样包一层真正的ArrayList(数组转集合有很多方式,可以参考链接).
热门内容:
区块链入门教程
Redis 到底是怎么实现“附近的人”这个功能的呢?
Java 的 JSP 已经被淘汰了吗?
Java:如何更优雅的处理空值?
为什么阿里巴巴要禁用Executors创建线程池?
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
为什么阿里巴巴开发手册明确说明 Arrays.asList() 不能使用其修改方法相关推荐
- arrays中copyof_为什么阿里巴巴开发手册明确说明 Arrays.asList() 不能使用其修改方法?...
作者:我想问问天 来源:https://juejin.im/post/5d10e52ee51d454f6f16ec11 引语: 阿里巴巴java开发规范说到使用工具类Arrays.asList()方法 ...
- 阿里巴巴开发手册——集合
阿里开发手册笔记:集合 1.ArrayList的sublist(form,to) 返回父list的一个视图,包含from不包含to,它是ArrayList的内部类,无法强制转换成ArrayList. ...
- 魔法值是什么?(为什么在阿里巴巴开发手册中提到不允许任何魔法值直接出现在代码中)
在阿里巴巴开发手册中,提到魔法值,是在最开始的常量定义中提到的.即如下图: 那么,魔法值究竟是什么? 在al手册中说是未经预先定义的常量. 其实这样说就已经很明了了,但毕竟是一个不常见的概念,所以我在 ...
- 包机制、阿里巴巴开发手册
公司域名倒置作为包名 com.baidu.www 阿里巴巴开发手册可百度搜索看看
- 关于阿里巴巴开发手册不得使用外键与级联,一切外键概念必须在应用层解决的疑惑
原文地址:http://www.codes51.com/itwd/4517194.html 问题: 关于阿里巴巴开发手册"不得使用外键与级联,一切外键概念必须在应用层解决"的疑惑 ...
- (阿里巴巴开发手册)为什么阿里巴巴推荐内部员工使用StringBuilder?
今日我在阅读阿里巴巴开发手册泰山版,发现开发手册上有这么一条:[推荐] 循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展. 字符串的三种表示类型 Strin ...
- Java阿里巴巴开发手册与JDK1.8API中文版下载
Java阿里巴巴开发手册 JDK1.8API中文版 链接:https://pan.baidu.com/s/1M3zp31KlRCXDXkBqHSUS6A 提取码:lcmc
- 阿里巴巴开发手册之应用分层
阿里巴巴开发手册自己所感 应用分层 总结:其实,对于*****的开放接口设计来说,manager层实在 业务逻辑层之上的,区别并不是很大,但是service 和 manager 可以互相转化 ,就数据 ...
- 全套阿里巴巴开发手册和大神解读一起给你【2022年整理】
前些日子查些资料想要看一下阿里巴巴开发手册,网上一搜出来了一大推,也搞不清楚哪个,更让人讨厌的是有很多介绍开发手册文章的是某些培训机构来吸引流量的,都能看得来的写文章的人根本不懂这些东西,最后放个二维 ...
最新文章
- Angular的ChangeDetectorRef.detectChanges()实现angularJS的$apply()方法,强制刷新数据渲染
- 使用javascript开发2048
- 还需要“attention”吗?一堆“前馈层”在ImageNet上表现得出奇得好
- 去哪儿网消息队列设计与实现
- 德鲁克的黄金管理20条—------中高层管理必修课
- 周鸿祎:网络安全不是一门“卖货”的生意
- python目录大纲
- Jmeter之配置元件操作
- 【渝粤题库】国家开放大学2021春3924★汽车电器设备构造与检修题目
- Django多表查询练习题
- vue-cli3.0打包时如何忽略某个第三方依赖包
- 正面刚谷歌苹果,diss了BAT及友商,商汤科技说自己是一只“黑羊”
- DHCP+NAT+IP隧道
- 24.猫狗数据自定义训练
- STM32 ADC 过采样技术
- 网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
- 情感驿站005:为什么大多数人永远不会真正成功?
- 案例分析:互联网营销和传统营销的区别
- 计算机卡住了怎样恢复,电脑频繁假死怎么办 电脑死机数据恢复
- 87个电影调色PR预设包