基本类型数组转换列表陷阱(asList)
来源:互联网 发布:python 矩阵相乘 编辑:程序博客网 时间:2024/05/17 12:21
避开基本类型数组转换列表陷阱
示例:
public class test { public static void main(String[] args) { int[] data={1,2,3,4,5}; List<int[]> asList = Arrays.asList(data); System.out.println(asList); System.out.println("int数组在集合中的类型:"+asList.get(0).getClass()); System.out.println(data.equals(asList.get(0))); }}
结果:
[[I@15db9742]
int数组在集合中的类型:class [I
true
从结果看出int数组被直接作为一个元素存储在了集合中,那怎样才能正确存储呢?
只需要做一下简单的修改就好了
public class test { public static void main(String[] args) { Integer[] data={1,2,3,4,5}; List<int[]> asList = Arrays.asList(data); System.out.println(asList); System.out.println("int数组在集合中的类型:"+asList.get(0).getClass()); System.out.println(data.equals(asList.get(0))); }}
仔细的同学会发现只是把int[]改变成了Integer[]结果就发生了很大的变化,这就是基本类型与包装类型的却别啦.大家以后再转化的时候一定要注意哦
注意AsList方法产生的List对象不可更改
代码:
public class test { public static void main(String[] args) { //五天工作日 Week[] workDays={Week.Mon,Week.Tue,Week.Wed,Week.Thu,Week.Fri}; //转换列表 List<Week> list=Arrays.asList(workDays); //增加周六也为工作日 list.add(Week.Sat); }}
结果
Exception in thread “main” java.lang.UnsupportedOperationException
为什么会报异常呢?
发掘asList方法源码:
public static <T> List<T> asList(T... a){ return new ArrayList<T>(a);}
是直接new ArrayList对象啊,怎么会没有add方法呢?哈哈,看看上面导入的包吧.你会发现他用的Arrays工具类中的一个内之类,并不是我们意识中的java.util.ArrayList 中的,内置类的构造如下:
private static class ArrayList<E> extends AbstractList<E>inpltments RandomAccess,java.io.Serizable{ //存储列表元素的数组 private final E[] a; //唯一的构造函数 Arraylist(E[] array){ if(array==null) throw new NullPointException(); a=array; } /*其他省略*/}
这里的ArrayList是一个静态私有内部类,只有Arrays呢狗访问,他并没有提供add方法
有人会觉得他的弗雷AbstractList提供了(不见棺材不掉泪)来看源码吧:
public boolean add(E e){ throw new UnsupportedOperatiobnException();}
父类确实提供了,但是并没有具体实现,在这个ArrayList静态内部类中他仅仅实现了5个方法:
size:元素数量.
toArray:转化为数组,实现数组的浅拷贝
get:获得指定元素
set:重置某一元素
contains:是否包含某元素
对于我们经常使用的List.add和List.remove()方法都没有实现,也就是说asList返回的是一个长度不可变的列表
阅读全文
0 0
- 基本类型数组转换列表陷阱(asList)
- 提高你的Java代码质量吧:避免基本类型数组转换列表陷阱(Arrays.asList())
- 避开基本类型数组转换列表陷阱
- 避开基本类型数组转换列表陷阱
- Java_集合操作_避开基本类型数组转换列表陷阱
- asList的使用缺陷—不能将8种基本数据类型数组转换为列表
- asList 方法使用时避免传入基本类型的数组
- java避开基本数据类型转换列表陷阱
- 基本类的数组利用Arrays.asList方法转换成list
- Arrays.asList打印基本数据类型数组出错
- Arrays.asList()陷阱
- 小心arrays.aslist陷阱
- Arrays.asList的陷阱
- iOS强制类型转换陷阱
- 基本数据类型转换的陷阱
- 基本数据类型数组转换列表显的有些力不从心
- Arrays.asList转换数组为集合List对象
- 数组转换成集合中的Arrays.asList用法
- json数组遍历的两种方式
- Centos7 通过yum安装pip
- [JSOI2008]星球大战(并查集)
- Bootstrap Table使用整理(三)
- 获取设备的UDID用于给远程手机安装测试包
- 基本类型数组转换列表陷阱(asList)
- D
- jQuery常用方法
- tomcat中的server.xml文件配置了URIEncoding="UTF-8"需要注意的问题
- 【HDU 2087】剪花布条 【KMP or strstr函数】
- Tr A
- 【笔记篇】C#笔记3
- 字符串处理func_split,func_split_TotalLength
- TensorFlow从入门到实战资料汇总