使用toArray将List转数组:使用Call to ‘toArray()‘ with pre-sized array argument ‘new String[list.size()]‘

代码示例:

public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("java");list.add("flink");list.add("spring");//第一种写法:该写法不规范String[] array1 = list.toArray(new String[list.size()]);//第二种写法:推荐写法//(可读性强,空数组为静态,无需创建数组;不过底层代码还是要创建数组的,但是jvm已做优化,可以忽略)String[] array2 = list.toArray(new String[0]);//第三种写法String[] array3 = list.stream().toArray(String[]::new);
}

String[] array = list.toArray(new String[list.size()]) 提示如下:

Call to ‘toArray()’ with pre-sized array argument ‘new String[list.size()]’ less…
Inspection info: There are two styles to convert a collection to an array: either using a pre-sized array (like c.toArray(new String[c.size()])) or using an empty array (like c.toArray(new String[0]).
In older Java versions using pre-sized array was recommended, as the reflection call which is necessary to create an array of proper size was quite slow. However since late updates of OpenJDK 6 this call was intrinsified, making the performance of the empty array version the same and sometimes even better, compared to the pre-sized version. Also passing pre-sized array is dangerous for a concurrent or synchronized collection as a data race is possible between the size and toArray call which may result in extra nulls at the end of the array, if the collection was concurrently shrunk during the operation.
This inspection allows to follow the uniform style: either using an empty array (which is recommended in modern Java) or using a pre-sized array (which might be faster in older Java versions or non-HotSpot based JVMs).

大致意思如下:

有两种样式可将集合转换为数组:

  • 使用预先调整大小的数组:c.toArray(new String[c.size()])不推荐
  • 使用空数组:c.toArray(new String[0])推荐

在旧的Java版本中,建议使用预先调整大小的数组,因为创建适当大小的数组所需的反射调用非常慢。但是,由于OpenJDK 6的最新更新,这个调用是内在的,使得空数组版本的性能与预先设置的版本相同,有时甚至更好。同时,传递预大小的数组对于并发或同步的集合是危险的,因为如果集合在操作期间同时收缩,那么在size()toArray()调用之间可能会发生数据竞争,这可能会导致数组末尾出现额外的空值。
这种检查允许遵循统一的风格:要么使用空数组(在现代Java中是推荐的),要么使用预先设置大小的数组(在较旧的Java版本或非基于热点的jvm中可能更快

源码

看下ArrayList的toArray源码

//存放数据的真实数组;ArrayList 底层时数据实现
T[] elementData;
//ArrayList 真实大小
private int size;//转换数组操作
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);                                           //1if (a.length > size)a[size] = null;return a;
}

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

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

相关文章

电脑开机就进入bios的解决方法

最近很多人反映自己的电脑一开机就直接进入bios里&#xff0c;无法正常进入系统。这是怎么回事呢?开机进入bios无法进入系统怎么办呢?别着急&#xff0c;今天就为大家带来电脑开机就进入bios的解决方法。 电脑开机就进入bios的解决方法&#xff1a; 1、如果是电脑的硬盘出了…

Serializable序列化和Externalizable序列化与反序列化的使用

1、序列化是干啥用的&#xff1f; 序列化的原本意图是希望对一个Java对象作一下“变换”&#xff0c;变成字节序列&#xff0c;这样一来方便持久化存储到磁盘&#xff0c;避免程序运行结束后对象就从内存里消失&#xff0c;另外变换成字节序列也更便于网络运输和传播&#xff…

Win10系统如何查看电脑是否是UEFI启动模式

Win10系统如何查看电脑是否是UEFI启动模式?现在越来越多的新电脑都采用UEFI来引导电脑系统&#xff0c;UEFI提高了开机后操作系统的启动速度&#xff0c;使电脑更加流畅&#xff0c;安全性更强&#xff0c;而传统的BIOS则没有UEFI用起来那么好。如何查看自己Win10系统电脑是否…

win10如何关闭Windows Defender安全保护程序

win10如何关闭Windows Defender安全保护程序&#xff1f;win10如何关闭Windows Defender安全保护程序?在安装的windows操作系统中&#xff0c;自带着安全保护程序“Windows Defender应用”&#xff0c;其实主要是为了保护好其他运行的软件&#xff0c;那该怎么来关闭这个软件呢…

7种抓包工具详细介绍

在处理IP网络的故障时&#xff0c;经常使用以太网抓包工具来查看和抓取IP网络上某些端口或某些网段的数据包&#xff0c;并对这些数据包进行分析&#xff0c;定位问题。 在 IMON项目里&#xff0c;使用抓包工具抓包进行分析的场景在EPG采集、引流模块和软终端监看模块&#xf…

2020-12-11

bios怎么恢复出厂设置? 1 第一步 打开电脑 在电脑出现开机提示时按下热键(一般是del或F2)就可以进入到bios设置界面 2 第二步 在bios设置界面中找到并选择“Load Optimized Default”&#xff0c; 然后按下回车键 3 第三步 在弹出窗口中选择“OK“ 然后回车键确定即可 …

JAVA序列化和反序列化的底层实现原理解析 更新时间:2019年11月27日 14:38:39 作者:myseries 这篇文章主要介绍了JAVA序列化和反序列化的底层实现原理解析,文中通

一、基本概念 1、什么是序列化和反序列化 &#xff08;1&#xff09;Java序列化是指把Java对象转换为字节序列的过程&#xff0c;而Java反序列化是指把字节序列恢复为Java对象的过程&#xff1b; &#xff08;2&#xff09;序列化&#xff1a;对象序列化的最主要的用处就是在…

笔记本电脑重启快捷键是什么

品牌型号&#xff1a;联想小新Air-14 2020 系统&#xff1a;win10 1909 64位企业版 部分用户可能电脑型号不一样&#xff0c;但系统版本一致都适合该方法。 用电脑用久了的朋友们都知道电脑的快捷键在哪里&#xff0c;笔记本电脑重启快捷键是什么?下面就给大家分享一下笔记…

MySQL max_allowed_packet设置及问题

异常摘要&#xff1a; [SQL] Query jeecgboot-mysql-5.7 start [ERR] 1153 - Got a packet bigger than max_allowed_packet bytes [ERR]原因分析&#xff1a; mysql根据配置文件会限制server接受的数据包大小。有时候大的插入和更新会受max_allowed_packet 参数限制&#xf…

新手iso系统怎么安装 新手安装iso镜像文件详细步骤

操作系统大多是iso格式的文件&#xff0c;尤其是Windows系统&#xff0c;都是.iso镜像&#xff0c;如果电脑可以正常使用&#xff0c;iso镜像文件只需解压出来就可以安装&#xff0c;但是对于新手来说&#xff0c;可能解压iso系统都是个问题&#xff0c;那么新手iso系统怎么安装…

Java获取一天的起止时间(Java8写法使用 LocalDateTime)

Calendar calendar new GregorianCalendar();// 0可以修改&#xff0c;0代表当前时间&#xff0c;-1代表前一天calendar.add(Calendar.DAY_OF_MONTH,0);//一天的开始时间 yyyy:MM:dd 00:00:00calendar.set(Calendar.HOUR_OF_DAY,0);calendar.set(Calendar.MINUTE,0);calend…

Windows10系统以太网显示“未识别的网络”如何解决

如果你的Win10系统电脑连不上网&#xff0c;那么可能会是三种情况导致的&#xff1a;受限未识别网络、拨号不成功或者网线没插好。其中&#xff0c;本地连接(以太网)提示“未识别的网络”情况是我们最经常碰到的。如果你的Win10系统无法访问网络&#xff0c;且在有线连接路由器…

Dubbo默认超时时间

默认超时时间为1秒(1000毫秒) 消费者单个服务的超时时间限制 DubboReference(version "1.0.0" ,timeout 2000)全局设置 dubbo:consumer:timeout: 2000测试代码:消费 DubboReference(version "1.0.0")public UserTestService userTestService;Testpub…

如何在bios里调节风扇转速 bios设置风扇转速的方法

CPU的温度对电脑的正常运行有很大的影响&#xff0c;如果温度过高那么电脑就不能正常工作&#xff0c;风扇在降低温度中发挥着很大的作用&#xff0c;那么如何在bios里调节风扇转速呢?下面就给大家分享bios设置风扇转速的方法。 1、启动电脑按快捷键进入BIOS里面&#xff0c;…

Java 中Date from()用法及代码示例

Java Date类的from(Instant inst)方法返回从Instant对象获取的date实例。 用法: public static Date from(Instant inst)参数&#xff1a;该方法采用一个Instant类型的参数inst&#xff0c;该参数需要转换。 返回值&#xff1a;该方法返回一个日期&#xff0c;该日期表示时间…

win7开机黑屏怎么解决?win7开机黑屏出现reboot and select的解决方法

很多用户有遇见电脑黑屏的情况&#xff0c;而且还出现 reboot and select proper boot deviceor insert boot media in selected boot device 的提示&#xff0c;win7开机黑屏怎么解决呢?可能是硬盘接口数据线出现松动了&#xff0c;也可能是硬盘坏了。今天小编整理了相关的教…

win10系统进入监护人模式的方法

现在很多的小学生也会一直玩电脑很多家长就担心影响孩子学习因此想要设置监护人模式但是不知道win10系统监护人模式怎么进入&#xff0c;今天就给你们带来了win10系统进入监护人模式的方法&#xff0c;快来看看吧。 win10系统进入监护人模式的方法&#xff1a; 1、首先点击左…

Java日期时间(LocalDate、LocalTime、LocalDateTime)

文章目录Java日期时间&#xff08;LocalDate、LocalTime、LocalDateTime&#xff09;前言1、LocalDate1.1、LocalDate常用API1.2、LocalDate 与 String 之间的转换1.3、LocalDate 与 Date之间的转换2、LocalTime2.1、LocalTime常用API2.2、LocalTime与 String 之间的转换3、Loc…

解决win10电脑声音太小的问题

右击任务栏声音图标&#xff0c;点击选择菜单中的“播放设备”。 如果声音图标未显示&#xff0c;请在控制面板(大图标查看方式)中&#xff0c;点击选择“声音”。 在声音对话框&#xff0c;点击选中扬声器&#xff0c;然后点击下面的“属性”。 在扬声器 属性对话框&#xff0…

win7 ie临时文件夹怎么修改存放位置

首先&#xff0c;鼠标左键双击打开Internet Explorer,然后点击右上角的设置图标,点Internet选项。 打开之后&#xff0c;找到并点击“设置” 打开之后&#xff0c;找到并点击“移动文件夹” 然后找一个存放IE临时文件的位置,设好了之后点确定。 要让IE临时文件的移动生效,要对移…