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 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...
随机推荐
- linux磁盘之回环设备
为什么要讲回环设备,下面看下系统的采样情况 上面图有loop0,loop1等设备标记,这些是什么?看看下面fdisk -l 的结果,乱糟糟的一堆? 什么是回环设备? 上面的loop0, loop1就是 ...
- 中文版Postman
作为软件开发从业者,API 调试是必不可少的一项技能,在这方面 Postman 做的非常出色.但是在整个软件开发过程中,API 调试只是其中的一部分,还有很多事情 Postman 无法完成,或者无法高 ...
- Python Windows 快捷键自动给剪贴板(复制)图片添加水印
编写一个能在windows上使用的按下快捷键自动给剪贴板(复制)的图片添加水印的小工具.plyer.PIL.pyinstaller.pynput.win32clipboard库.记录自己踩过的坑,部分 ...
- SpringMVC踩的第一个坑——Servlet.init()引发异常
正确的设置了第一个SpringMVC相关的配置,初始启动服务器时,报404,经过排查,是项目生成构建的时候没有导入好依赖,手动在项目结构里面新建lib目录添加依赖解决了404的问题,重新部署以后开始报 ...
- go源码阅读 - sync/mutex
Mutex是go标准库中的互斥锁,用于处理并发场景下共享资源的访问冲突问题. 1. Mutex定义: // A Mutex is a mutual exclusion lock. // The zer ...
- Java语言学习day22--7月28日
###12多态概述 * A: 多态概述 多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Ja ...
- Xray学习
Xray 目前支持的漏洞检测类型包括: XSS漏洞检测 (key: xss) SQL 注入检测 (key: sqldet) 命令/代码注入检测 (key: cmd-injection) 目录枚举 (k ...
- 深入理解vue 修饰符sync【 vue sync修饰符示例】
在说vue 修饰符sync前,我们先看下官方文档:vue .sync 修饰符,里面说vue .sync 修饰符以前存在于vue1.0版本里,但是在在 2.0 中移除了 .sync .但是在 2.0 发 ...
- 终极套娃 2.0|云原生 PaaS 平台的可观测性实践分享
某个周一上午,小涛像往常一样泡上一杯热咖啡 ️,准备打开项目协同开始新一天的工作,突然隔壁的小文喊道:"快看,用户支持群里炸锅了 -" 用户 A:"Git 服务有点问题, ...
- [AcWing 797] 差分
点击查看代码 #include<iostream> using namespace std; const int N = 1e5 + 10; int a[N], b[N]; void in ...