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;}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android定位会出现的问题,android – 使用GPS_PROVIDER进行定位时出现问题

使用&#xff1a;locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES,MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, locationListener);对于locationListener,您可以使用&#xff1a;LocationListener locationListener new Locati…

自底向上伸展树(之字形旋转+一字形旋转)

【0】README 0.1&#xff09; 本文总结于 数据结构与算法分析&#xff0c;核心剖析路线为原创&#xff0c; 旨在理清 自底向上伸展树&#xff08;之字形旋转一字形旋转&#xff09; 的基本思路&#xff1b; 0.2&#xff09; 自底向上伸展树 是基于 AVL树&#xff0c;for deta…

apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第2部分)

apache.camel我以前曾在博客中介绍我们在下一个Camel 3.1版本&#xff08;第1部分&#xff09;中所做的优化 。 今天&#xff0c;我想发布大约4周后的状态更新。 我们集中在三个方面优化骆驼核心&#xff1a; 不必要的对象分配 不必要的方法调用 提高绩效 换句话说&#…

Util包中Arrays

java.util 类 Arrays java.lang.Object -java.util.Arrayspublic class Arrays extends Object此类包含用来操作数组&#xff08;比如排序和搜索&#xff09;的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。 除非特别注明&#xff0c;否则如果指定数组引用为 …

Android的sqlite使用外部,Android 使用外部已经建立好的sqlite数据库

最近项目需要通过电话号码查询归属地&#xff0c;决定直接在本地sqlite的数据库进行查询&#xff0c;没必要去访问网络(虽然最后还是决定还是将数据库放在服务器上)一 首先先将外部的sqlite数据库放入assets文件夹下面注意&#xff1a;必须是sqlite数据库(XXX.db)&#xff0c;如…

java流与文件——操作文件

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——操作文件 的相关知识&#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/ch…

阅读副本和Spring Data第2部分:配置基础项目

在上一篇文章中&#xff0c;我们使用相同的数据设置了多个PostgreSQL实例。 下一步将是使用这两个服务器来配置spring项目。 如前所述&#xff0c;由于我们使用完全相同的数据库&#xff0c;因此我们将使用Spring Boot JPA帖子中的一些代码。 这将是我们的gradle构建文件 pl…

java生成UUID通用唯一识别码

一、UUID概述UUID含义是通用唯一识别码 (Universally Unique Identifier)&#xff0c;这是一个软件建构的标准&#xff0c;也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。 UUID 的目…

android 项目部署,Android发布项目到JCenter

JCenter是什么大家应该都用过各种各样的Github上的第三方开源组件。类似这种效果的compile wang.yuchao.demoforjcenterlibrary:DemoForJCenterLibraryModel:1.2.5我们会比较好奇Android Studio 是从哪里得到这个类库的&#xff1f;Android Studio是从build.gradle里面定义的Ma…

java流与文件——对象流和序列化

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——对象流和序列化 的相关知识&#xff1b; 0.2&#xff09; for source code , please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdva…

maven 版本号插件_测试Maven版本插件自动递增版本号

maven 版本号插件抽象 Maven版本插件是一个非常强大的工具&#xff0c;我在很大程度上依赖于它来协调软件版本。 通常&#xff0c;软件发行版本号遵循简单的1.0.0.0-SNAPSHOT格式。 但是最近我需要在版本号中添加一个限定符&#xff0c;例如1.0-beta-SNAPSHOT或1.0.0-fix-bug-d…

java中Date

在类 Date 所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中&#xff0c;将使用下面的表示形式&#xff1a;年份 y 由整数 y - 1900 表示。月份由从 0 至 11 的整数表示&#xff1b;0 是一月、1 是二月等等&#xff1b;因此 11 是十二月。日期&#xff08;一月中的某…

如何配置android的adb环境变量,如何配置adb环境变量?win7配置adb环境变量的方法...

本文教程小编分享就是win7系统配置adb环境变量的方法&#xff0c; windows7系统 电脑安装adb工具时&#xff0c;提示“adb不是内部或外部命令”这时候我们需要重新配置adb环境变量&#xff0c;那么win7系统怎么配置adb环境变量&#xff1f;网上介绍配置adb环境变量的方法比较少…

jep290涉及jdk版本_JDK 14 / JEP 305模式匹配“ Smart Casts”实例

jep290涉及jdk版本我通常将Java代码中instanceof运算符的存在视为“ 红色标志 ”&#xff0c;这意味着在某些情况下使用instanceof不一定是错误的&#xff0c;但是使用它有时表示可以通过更干净的方式解决设计问题&#xff0c;如所述本文结尾处引用的一些资源中的内容&#xff…

java中Date与DateFormat的格式输出

一、DateFormat java.text.DateFormat 使用 getDateInstance 来获取该国家/地区的标准日期格式。另外还提供了一些其他静态工厂方法。使用 getTimeInstance 可获取该国家/地区的时间格式。使用 getDateTimeInstance 可获取日期和时间格式。可以将不同选项传入这些工厂方法&…

二叉堆的操作总结(insert+deleteMin+increaseKey+decreaseKey+percolateDown+percolateUp)

【0】README 本文idea 均为原创&#xff0c; for source code, please visit https://github.com/pacosonTang/dataStructure-algorithmAnalysis/tree/master/chapter6/p140_binaryheap_conclusion 【1】insert操作 // Attention, the index of the heap starts from 1 void …

aws生态系统集成商_通过通用数据访问扩展AWS生态系统

aws生态系统集成商Amazon Web Services&#xff08;AWS&#xff09;可帮助组织托管和管理其数据流程&#xff0c;例如构建数据可视化和执行ETL任务。 在CData&#xff0c;我们可以轻松地将AWS Services与异构业务应用程序和分布式数据存储连接起来&#xff0c;以最终帮助企业对…

HTML.parser和正则解析,正则表达式+HTMLParser使用详.ppt

getText:/body getText: getText:/htmlgetText:除了前面3.2中输出的几个Tag&#xff0c;其余的Tag都在这里了。 3.4 XorFilter 把前面的AndFilter换成NotFilter测试代码&#xff1a; NodeFilter filterID new HasAttributeFilter( "id" );NodeFilter filterChild n…

FileDescriptor的作用

一、FileDescriptor 文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄&#xff0c;该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的 FileInputStream 或 FileOutputStream。 二、静态标准文件描述…

java流与文件——内存映射文件

【0】README 0.1&#xff09; 本文描述转自 core java volume 2&#xff0c; 旨在理解 java流与文件——内存映射文件 的相关知识&#xff1b; 0.2&#xff09;内存映射文件的目的是&#xff1a; 提高访问速度&#xff0c; 缓冲区Buffer&#xff1b; 0.3&#xff09; 本文干…