List转数组toArray方法
一、List.toArray方法
List提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法:
Object[]
|
toArray() 返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。 |
<T> T[] |
toArray(T[] a) 返回按适当顺序(从第一个元素到最后一个元素)包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。 |
第一种重载方法,是将list直接转为Object[] 数组,并不是数组的原类型;
第二种方法是将list转化为你所需要类型的数组,当然我们用的时候会转化为与list内容相同的类型。
二、toArray编程规则
(1) Object[] toArray()方法
List list = new ArrayList();
list.add(new Student());
list.add(new Student());
list.add(new Student());
Student[] s = (Student[]) list.toArray();
运行程序会抛出异常:java.lang.ClassCastException
(2)T[] toArray(T[] a)方法 如果a数组的长度小于原数组的长度,则重新分配空间复制并返回,否则使用a数组复制并返回
List list = new ArrayList();
list.add(new Student());
list.add(new Student());
list.add(new Student());
Student[] student = (Student[]) list.toArray(new Student[0]);
运行结果正确
三、ArrayList toArray方法源码
(1)Object[] toArray()方法
public Object[] toArray() {return Arrays.copyOf(elementData, size);
}
Arrays类copyOf方法
public static <T> T[] copyOf(T[] original, int newLength) {return (T[]) copyOf(original, newLength, original.getClass());}public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {//判断类型是否为Object[]类型T[] copy = ((Object)newType == (Object)Object[].class)//Object[]类型实例化? (T[]) new Object[newLength]//非Object[]类型实例化: (T[]) Array.newInstance(newType.getComponentType(), newLength);//复制数组System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength));return copy;
}
(2) T[] toArray(T[] a)方法
public <T> T[] toArray(T[] a) {//传入的数组长度小于实际数组长度重新分配空间并复制数组if (a.length < size)// Make a new array of a's runtime type, but my contents:return (T[]) Arrays.copyOf(elementData, size, a.getClass());//复制数组System.arraycopy(elementData, 0, a, 0, size);//旧数组长度作为索引,指向新数组的空间赋值为nullif (a.length > size)a[size] = null;return a;}
List转数组toArray方法相关推荐
- 集合转数组toArray方法
现象 集合转数组toArray方法 方法: 1.直接使用 toArray方法 得到的是 Object[] 若强转其它类型数组将出现 ClassCastException 错误 2:使用使用集合的 to ...
- list子类使用toarray方法实现集合向数组转换,下列哪些说法是正确的
单选 list子类使用toarray方法实现集合向数组转换,下列哪些说法是正确的:答案在文末 A. Vector无法使用toArray转换成数组. B. 优先推荐:调用集合类的方法toArray(T[ ...
- 浅谈集合转换成数组的方法--toArray()与toArray(T[] a)
众所周知,ArrayList 集合的底层是通过数组来实现的,但是集合与数组还是有一些区别的,简单来说,集合的长度是可变的,而数组的长度是不可变的,通过这点可以引发出一点效率上的差异,当所处理的数据长度 ...
- 使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一样的数组,大小就是 list.size()。
使用 toArray 带参方法,入参分配的数组空间不够大时,toArray 方法内部将重新分配 内存空间,并返回新数组地址:如果数组元素大于实际所需,下标为[ list.size() ]的数组 元素将 ...
- 集合转数组 toArray()方法
1ArrayList之toArray: toArray有两个重载的方法: (1)list.toArray(); (2)list.toArray(T[] a); 第一个是,将list直接转为Object ...
- java object toarray_集合的toArray方法产生的Object[]数组转换失败
最近遇见一个问题,即调用一个集合(只存放类A的对象)的toArray()方法变成Object[]数组,最后将它转换成A[]时抛出类型转换异常.不知道为什么不能转换成功. 最后了解到,集合的toArra ...
- js类数组转数组的方法(ArrayLike)
1. 什么是类数组ArrayLike 拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解) 不具有数组所具有的方法 //类数组示例 ...
- java中List的toArray方法
把List转换成某种类型的数组,就拿String类型来做例子吧,有以下两种方式: //方法1,使用不带参数的toArray方法 String[] arr1=new String[list.size() ...
- 关于Arrays类中toArray方法的总结
学了差不多两年的Java,数组类Arrays应该是我最常用到的类之一了,在整个学习的过程中,会更常用到一个方法,那就是toArray方法,因为将Collections类型的集合转化为数组后,将会更容易 ...
最新文章
- AT5198 01 Matrix(构造)
- C++游戏开发需要阅读的书籍
- Ninja Blocks物联网平台简介
- 普及组2008NOIP 排座椅(贪心+排序)
- VTK:Math之LeastSquares
- android5.1移植记录
- 二.全局定位--开源定位框架livox-relocalization实录数据集测试
- drawforeground只有鼠标事件进入才刷新_为什么移动鼠标会让操作系统跑得更快?...
- regester正则用法_Regester学习笔记
- java公司自己封装的框架_SpringBoot封装自己的Starter的实现方法
- work summary(3)
- docker compose入门
- 利用VBA操作OutLook批量发送工资条
- Java编程中常见异常有哪些?
- 数码照片的Photoshop清晰化处理漫谈-photoshop-Photoshop-天极Yesky
- 前端图片压缩(几乎无损)
- echarts的示例二:饼图(南丁格尔图)
- thinkserver t340 u盘安装centos 遇到的问题
- 黑鲨3能升级鸿蒙5g吗,配上高通骁龙865 5G芯片的黑鲨游戏手机3,到底有多懂手游玩家!...
- 通过ICursor对Table进行操作(添加、修改、删除)
热门文章
- [JavaWeb-HTTP]request对象继承体系结构
- 高等数学下-赵立军-北京大学出版社-题解-练习11.2
- [PAT乙级]1022 D进制的A+B
- 三调 图斑地类面积_三调对于最小上图图斑面积的要求是:
- word List32
- Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)
- 2020牛客暑期多校训练营(第四场)H.Harder Gcd Problem(把1到n分为不互质的数对,找最多的对数)
- P2447 [SDOI2010]外星千足虫
- 2021牛客暑期多校训练营2
- 2020牛客国庆集训派对day4 Emergency Evacuation