AsList()方法详解
AsList()方法详解
在Java中,我们应该如何将一个数组array转换为一个List列表并赋初始值?首先想到的肯定是利用List自带的add()方法,先new一个List对象,再使用add()方法将数组array中的值一个一个放入。这种方法固然可行,但是比较繁琐。那么有没有稍微简单一点的方法呢?Arrays.asList()方法可以作为一个解决方案。
首先放上asList()方法的源代码,会在后续分析中使用。

使用Arrays.asList()方法时,需要注意以下几点:
1、不支持add()、remove()、clear()等方法
使用上述方法在编译时并不会报错,而在运行时会抛出java.lang.UnsupportedOperationException错误。
import java.util.Arrays;
import java.util.List;
public class AsListTest {
public static void main(String[] args) {
String[] s = {"a", "b", "c"};
List list = Arrays.asList(s);
list.add("d");
}
}
// 结果:
// Exception in thread "main" java.lang.UnsupportedOperationException
究其原因,是因为此方法并未创建Util包下的List实现类,而是在Arrays.java包下自定义了一个ArrayList类。如上图所示,为asList()方法,这个类并未实现add()等方法,而是直接使用父类AbstractList的相应方法,导致报错。因此需要注意的是,使用该方法时,不能对转化后的List进行增加或删除操作,只能进行读取或修改。
2、基本数据类型数组转换后使用size()方法时返回不正确
当数组为基本数据类型的数组时,将数组转换为List后,使用List.size()方法获取List长度不正确。
import java.util.Arrays;
import java.util.List;
public class AsListTest {
public static void main(String[] args) {
int[] i = {1, 2, 3};
List list = Arrays.asList(i);
System.out.println(list.size());
}
}
// 结果:1
究其原因,是因为构造方法传入了一个泛型数组参数,但是由于int[]本身就是一个类型,所以编译器认为只传了一个变量,这个变量的类型是int数组,结构为int(1)(),因此size为1。
由上述分析,因为基本数据类型数组转换后使用size()方法时返回不正确,根据索引对转换后List进行修改也会出现错误。因此,不要对基本数据类型数组进行转换,尽量使用基本数据类型的包装类,如:Integer等。
3、对List或Array其中一个进行修改,另一个也会相应改变
import java.util.Arrays;
import java.util.List;
public class AsListTest {
public static void main(String[] args) {
String[] s = {"a", "b", "c"};
List list = Arrays.asList(s);
s[0] = "b";
System.out.println("Array:"+Arrays.toString(s));
System.out.println("List:"+list);
list.set(1, "c");
System.out.println("Array:"+Arrays.toString(s));
System.out.println("List:"+list);
}
}
// 结果:
// Array:[b, b, c]
// List:[b, b, c]
// Array:[b, c, c]
// List:[b, c, c]
从上面结果可以看出,对List或Array其中一个进行修改,另一个也会相应改变。这是因为由asList()方法生成的List仅是对Array进行了一层包装,对List进行操作实际还是对初始Array的操作。
AsList()方法详解的更多相关文章
- session的使用方法详解
session的使用方法详解 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器 ...
- Kooboo CMS - Html.FrontHtml[Helper.cs] 各个方法详解
下面罗列了方法详解,每一个方法一篇文章. Kooboo CMS - @Html.FrontHtml().HtmlTitle() 详解 Kooboo CMS - Html.FrontHtml.Posit ...
- HTTP请求方法详解
HTTP请求方法详解 请求方法:指定了客户端想对指定的资源/服务器作何种操作 下面我们介绍HTTP/1.1中可用的请求方法: [GET:获取资源] GET方法用来请求已被URI识别的资源.指定 ...
- ecshop后台增加|添加商店设置选项和使用方法详解
有时候我们想在Ecshop后台做个设置.radio.checkbox 等等来控制页面的显示,看看Ecshop的设计,用到了shop_config这个商店设置功能 Ecshop后台增加|添加商店设置选项 ...
- (转)Spring JdbcTemplate 方法详解
Spring JdbcTemplate方法详解 文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供 ...
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- windows.open()、close()方法详解
windows.open()方法详解: window.open(URL,name,features,replace)用于载入指定的URL到新的或已存在的窗口中,并返回代表新窗口的Win ...
- CURL使用方法详解
php采集神器CURL使用方法详解 作者:佚名 更新时间:2016-10-21 对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程 ...
- JAVA 注解的几大作用及使用方法详解
JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...
随机推荐
- Python入门-内置对象函数
1.callable() 查看函数知否可调用,可调用返回True,不可用返回False print("input函数:", callable(input)) #input函数: T ...
- docker方式安装zabbix
这个示例展现了如何运行支持MySQL数据库的Zabbix server,基于Nginx web服务器运行Zabbix web接口,以及Zabbix Java gateway. 1. 启动一个空的MyS ...
- HTML/CSS+JS制作一个高考倒计时页面
2020-07-09更新 修复倒计时归零后出现负数的bug 自动切换至下一年日期 ##效果展示 前言 在B站上找视频学习的,勉强搞出来了,写下此篇文章作为笔记,也希望有更多感兴趣的人能够有所收获. ( ...
- node.js - mysql
今天结束的挺早,因为今天的内容还可以不是很难,今天全程是学了一些关于mysql数据库和sql查询语句的内容包括在node终端里面怎么来连接数据库.经过今天的一个学习,我感觉离那个地步越来越近了,就是那 ...
- [题解][P5206][WC2019] 数树 (op = 1)
简要题意 给定 \(n, y\). 一张图有 \(|V| = n\) 个点,现在给出两棵树 \(T_1=G(V, E_1)\) 和 \(T_2=G(V, E_2)\). 定义这两棵树的权值 \(F(E ...
- Kubernetes生产环境最佳实践
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 众所周知,Kubernetes很难! 以下是在生产中使用 ...
- 逆向进阶,利用 AST 技术还原 JavaScript 混淆代码
什么是 AST AST(Abstract Syntax Tree),中文抽象语法树,简称语法树(Syntax Tree),是源代码的抽象语法结构的树状表现形式,树上的每个节点都表示源代码中的一种结构. ...
- 如何彻底禁止 macOS Monterey 自动更新,去除更新标记和通知
请访问原文链接:如何彻底禁止 macOS Monterey 自动更新,去除更新标记和通知,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org 随着 macOS Montere ...
- ElasticSearch7.3学习(二十三)----RestHighLevelClient Java api实现match_all、ids、match、term、multi_match、bool、filter、sort等不同的搜索方式
1.数据准备 首先创建book索引 PUT /book/ { "settings": { "number_of_shards": 1, "number ...
- Redis GEO 地理位置
目录 GEO指令 GEOADD GEODIST GEOPOP GEOHASH GEORADIUS GEORADIUSBYMEMBER 指令补充 删除操作 避免单集合数量过多 存储原理 GEOADD存储 ...