一、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方法相关推荐

  1. 集合转数组toArray方法

    现象 集合转数组toArray方法 方法: 1.直接使用 toArray方法 得到的是 Object[] 若强转其它类型数组将出现 ClassCastException 错误 2:使用使用集合的 to ...

  2. list子类使用toarray方法实现集合向数组转换,下列哪些说法是正确的

    单选 list子类使用toarray方法实现集合向数组转换,下列哪些说法是正确的:答案在文末 A. Vector无法使用toArray转换成数组. B. 优先推荐:调用集合类的方法toArray(T[ ...

  3. 浅谈集合转换成数组的方法--toArray()与toArray(T[] a)

    众所周知,ArrayList 集合的底层是通过数组来实现的,但是集合与数组还是有一些区别的,简单来说,集合的长度是可变的,而数组的长度是不可变的,通过这点可以引发出一点效率上的差异,当所处理的数据长度 ...

  4. 使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一样的数组,大小就是 list.size()。

    使用 toArray 带参方法,入参分配的数组空间不够大时,toArray 方法内部将重新分配 内存空间,并返回新数组地址:如果数组元素大于实际所需,下标为[ list.size() ]的数组 元素将 ...

  5. 集合转数组 toArray()方法

    1ArrayList之toArray: toArray有两个重载的方法: (1)list.toArray(); (2)list.toArray(T[] a); 第一个是,将list直接转为Object ...

  6. java object toarray_集合的toArray方法产生的Object[]数组转换失败

    最近遇见一个问题,即调用一个集合(只存放类A的对象)的toArray()方法变成Object[]数组,最后将它转换成A[]时抛出类型转换异常.不知道为什么不能转换成功. 最后了解到,集合的toArra ...

  7. js类数组转数组的方法(ArrayLike)

    1. 什么是类数组ArrayLike 拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理,这里你可以当做是个非负整数串来理解) 不具有数组所具有的方法 //类数组示例 ...

  8. java中List的toArray方法

    把List转换成某种类型的数组,就拿String类型来做例子吧,有以下两种方式: //方法1,使用不带参数的toArray方法 String[] arr1=new String[list.size() ...

  9. 关于Arrays类中toArray方法的总结

    学了差不多两年的Java,数组类Arrays应该是我最常用到的类之一了,在整个学习的过程中,会更常用到一个方法,那就是toArray方法,因为将Collections类型的集合转化为数组后,将会更容易 ...

最新文章

  1. AT5198 01 Matrix(构造)
  2. C++游戏开发需要阅读的书籍
  3. Ninja Blocks物联网平台简介
  4. 普及组2008NOIP 排座椅(贪心+排序)
  5. VTK:Math之LeastSquares
  6. android5.1移植记录
  7. 二.全局定位--开源定位框架livox-relocalization实录数据集测试
  8. drawforeground只有鼠标事件进入才刷新_为什么移动鼠标会让操作系统跑得更快?...
  9. regester正则用法_Regester学习笔记
  10. java公司自己封装的框架_SpringBoot封装自己的Starter的实现方法
  11. work summary(3)
  12. docker compose入门
  13. 利用VBA操作OutLook批量发送工资条
  14. Java编程中常见异常有哪些?
  15. 数码照片的Photoshop清晰化处理漫谈-photoshop-Photoshop-天极Yesky
  16. 前端图片压缩(几乎无损)
  17. echarts的示例二:饼图(南丁格尔图)
  18. thinkserver t340 u盘安装centos 遇到的问题
  19. 黑鲨3能升级鸿蒙5g吗,配上高通骁龙865 5G芯片的黑鲨游戏手机3,到底有多懂手游玩家!...
  20. 通过ICursor对Table进行操作(添加、修改、删除)

热门文章

  1. [JavaWeb-HTTP]request对象继承体系结构
  2. 高等数学下-赵立军-北京大学出版社-题解-练习11.2
  3. [PAT乙级]1022 D进制的A+B
  4. 三调 图斑地类面积_三调对于最小上图图斑面积的要求是:
  5. word List32
  6. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)
  7. 2020牛客暑期多校训练营(第四场)H.Harder Gcd Problem(把1到n分为不互质的数对,找最多的对数)
  8. P2447 [SDOI2010]外星千足虫
  9. 2021牛客暑期多校训练营2
  10. 2020牛客国庆集训派对day4 Emergency Evacuation