文档章节

java.util.Arrays.asList使用需要注意的地方

_sheldon
 _sheldon
发布于 2017/02/22 10:38
字数 328
阅读 6
收藏 0

转自:DOUBLE.ME

问题

先看这段代码,使用Arrays.asList返回一个List,然后在list中增加一个对象,抛出java.lang.UnsupportedOperationException,意思是不支持这个操作。

List<String> list = Arrays.asList("a","b","c","d","e");
System.out.println(list);
list.add("f");
System.out.println(list);
输出:
[a, b, c, d, e]
Exception in thread "main" java.lang.UnsupportedOperationException
....

<!-- more -->

分析

下面是java.Arrays.asList的源码,返回一个ArrayList,好像没有什么不对的。

public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}

但是方法注释写着:Returns a fixed-size list backed by the specified array...返回由指定数组支持的固定大小的列表.

仔细观察的话,就会发现此时返回的ArrayList并不是我们熟悉的java.util.ArrayList,而是Arrays类中的一个静态内部类: private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable 此内部类继承与java.util.AbstractList,但是并没有实现add,remove方法

在java.util.AbstractList中的add和remove源码:

public void add(int index, E element) {
    throw new UnsupportedOperationException();
}

public E remove(int index) {
    throw new UnsupportedOperationException();
}

可以看到这两个方法直接就抛出异常,因为这两个方法是需要子类重写的。所以当我们使用asList时应注意返回的list大小是不能变的,如果想改变list的大小,可以这样:

List<String> list =new ArrayList<>(Arrays.asList("a","b","c","d","e"));

或者使用其他工具类。

© 著作权归作者所有

上一篇: 打印英文句子
下一篇: centos7开放端口
_sheldon
粉丝 1
博文 8
码字总数 3633
作品 0
程序员
私信 提问
使用Log4J来作为Spring Boot的日志系统

修改 排除掉对logback的依赖,添加对log4j的依赖 2.设置定log4j的配置文件位置,例如: 把文件放到目录下,然后在文件里设置 3. 在Spring Boot的启动类里用代码手动加载log4j,例如:...

白石
2017/11/02
243
0
Arrays.asList的用法:

Arrays.asList 返回数组而非List。 List的一个典型的特性就是其长度是可变的,我们可以很方便地对它进行插入和删除元素的操作,这是它与数组所存在的一个很大的区别,后者的长度是固定的,而...

文文1
2015/09/09
212
0
Java 中初始化 List 集合的 6 种方式!

List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下。 如果想学习Java工程化、高性能及分布式、深入浅出。...

编程SHA
2018/12/06
32
0
checkbox传值和取值,循环删除

JSP部分: 删除 保险公司编号 保险公司 保险员号 保险员姓名 有效状态 绑定网点名称 绑定网点号 js部分: function deleteItem(){ var rows = $('#rt').datagrid('getSelected'); if (null =......

言午草民
2015/03/03
1K
5
逗号拼接的字符串、数组、List、Set、Map之间的相互转换

【逗号拼接的字符串------->数组】 String str = "a,b,c,1,2,3"; String[] strArray = str.split(","); 【数组------->逗号拼接的字符串】 String str = org.apache.commons.lang.StringUti......

Jack088
03/15
13
0

没有更多内容

加载失败,请刷新页面

加载更多

启动参数

常用启动参数,通过 -Dxx.yy=zz注入应用参数 -Deureka.instance.metadata-map.starkGroup=test3 -Dserver.port=8989 本地调试过程中,可改变端口来启动多个相同服务。修改启动的VM参数即可...

ZH-JSON
8分钟前
3
0
ES配置修改

查看配置 GET /_cluster/settings 修改配置 PUT /_cluster/settings{ "persistent" : { "xpack" : { "monitoring" : { "collection" : { "enabled" : ......

messud4312
19分钟前
2
0
Spring事务传播属性有那么难吗?看这一篇就够了

Spring事务传播属性有那么难吗?看这一篇就够了 笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽 学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过...

不学无数的程序员
19分钟前
2
0
VMware vSphere ESXi主机的访问控制

在vShpere中,访问ESXi主机的途径很多,如下: ESXi DCUI ESXi Shell ESXi SSH ESXi Host Client vCenter --> vSphere web client / vSphere Client VMware vSphere ESXi主机的访问控制,除了......

大别阿郎
44分钟前
4
0
大神讲解CGI、FastCGI和PHP-FPM关系图解

参考资料 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM:http://www.nowamagic.net/librarys/veda/detail/1319 php中fastcgi和php-fpm是什么东西:https://www.zybuluo.com/phper/note/50231 ......

网络小虾米
54分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部