文档章节

避免基本类型数组转换列表陷阱(Arrays.asList())

那位先生_
 那位先生_
发布于 2013/08/20 15:09
字数 476
阅读 80
收藏 0

一、分析 
我们在开发的过程中经常会使用Arrays和Collections这两个工具类在数组和列表之间转换。 
Arrays.asList()方法:输入一个变长参数,返回一个固定长度的列表。看源码:
 
public static<T> List<T> asList(T... a){   
    return new ArrayList<T>(a);   
}

asList方法输入的是一个泛型变长参数,我们知道基本类型是不能泛型化的,也就是说8个基本类型不能作为泛型参数,要想作为泛型化参数就必须使用其对应的包装类型。 
二、场景 
在使用Arrays虽然非常方便,但有时候会出现一些奇怪的问题,看如下代码: 

public static void main(String[] args){   
    int[] data = {1,2,3,4,5};   
    List list = Arrays.asList(data);   
    System.out.println("列表中的元素数量是:" + list.size());   


也许你会说,这很简单,list变量的元素数量当然是5。但是运行结果却是1。 
由上分析得知,int基本类型是不能被泛型化,传入asList方法的。在Java中数组是一个对象,它是可以泛型化的,也就是说上面例子把int类型的数组作为了T的类型,所以在转换后在List中就只有一个类型为int数组的元素了。我们打印出来看看,代码如下: 

public static void main(String[] args){   
    int[] data = {1,2,3,4,5};   
    List list = Arrays.asList(data);   
    System.out.println("元素类型:" + list.get(0).getClass());   
    System.out.println("前后是否相等:" + data.equals(list.get(0));   
}

输出结果是: 
元素类型:class [I 
前后是否相等:true 
问题弄清楚了,修改方案也就有了,直接使用包装类型即可,代码如下: 

public static void main(String[] args){   
    Integer[] data = {1,2,3,4,5};   
    List list = Arrays.asList(data);   
    System.out.println("列表中的元素数量是:"+ list.size());   
}ᅠ   

三、建议 
原始类型数组不能作为asList的输入参数,否则会引起程序逻辑混乱。

本文转载自:http://blog.csdn.net/p106786860/article/details/10094717

共有 人打赏支持
那位先生_

那位先生_

粉丝 131
博文 60
码字总数 68212
作品 0
深圳
后端工程师
私信 提问
Arrays.asList陷阱

代码如下 public static void main(String[] args) { int[] data = {1,2,3,4,5}; List list = Arrays.asList(data); System.out.println("列表中的元素数量是:" + list.size()); } 注意这里......

肥猫钓鱼
2014/03/20
0
0
Arrays.asList的用法:

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

文文1
2015/09/09
174
0
Java基本类型数组转ArrayList

先来看源码 当我们调用Arrays.asList(array) 时,实际是执行了包可见的ArrayList的构造函数(注意通常这个构造函数对用户是不可见的,所以不能通过) 由于a是一个E[]数组,E又是ArrayList的泛...

微流
2016/05/26
0
0
java中数组与List相互转换的方法

1.List转换成为数组。(这里的List是实体是ArrayList)   调用ArrayList的toArray方法。   toArray   public <T> T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中所有元素的数组...

Carl_
2014/09/16
0
0
Arrays.asList(T... a) 不转换基本类型数组值为list

随手总结一下,数组转换为list总结 int[] a1 = new int[] { 1, 2, 3, 4 }; String[] a2 = new String[] { "srt1", "srt2", "srt3", "srt4" }; System.out.println(a1.getClass().getName() +......

Nika
2011/08/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

spring学习笔记(二)spring 事件的使用

spring 中的事件 spring事件通过订阅发布 可以解耦操作 可以同步 可以异步 步骤 编写事件 通过继承org.springframework.context.ApplicationEvent 来编写事件 public ApplicationEvent(Obj...

NotFound403
29分钟前
1
0
特斯拉车主成功破解了自己Model 3汽车

据汽车博客Electrek消息,一位特斯拉车主成功破解了自己Model 3汽车,还在此基础上运行了Ubuntu。 这位叫trsohmers的网友表示,“功劳大多要归到Ingineerix的头上,他花了数月才找到初始的那...

linuxCool
43分钟前
1
0
Gitbook : random errors when using gitbook plugin on running "gitbook serve"

在执行gitbook serve时,会有不定的失败错误 参考问题 :#1309 解决方案: 更新gitbook版本,这个问题似乎是3版本的问题 , 官方也不打算在这个版本解决了。 更新 到最新版本后, 不再出现问...

ol_O_O_lo
57分钟前
1
0
提灯照暗,向内自省——《中国文化的深层结构》读书笔记3800字

提灯照暗,向内自省——《中国文化的深层结构》读书笔记3800字: 作者:王健茜;断断续续一个多月才读完了《中国文化的深层结构》,这并不是一本难懂的书,之所以读得慢,源于对书中观点的思...

原创小博客
今天
1
0
高德地图-行政区域接口

1、获取全国各省信息 https://restapi.amap.com/v3/config/district?extensions=all&key=应用Key&s=rsv3&output=json 2、获取下级行政区域信息 https://restapi.amap.com/v3/config/distric......

voole
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部