Set.toArray(new String[size]) 和 Set.toArray(new String[0]) 区别

Set.toArray(new String[size]) 和 Set.toArray(new String[0]) 区别

在Java中,Set.toArray(T[] array) 方法用于将集合(Set)中的元素转换为数组。两种常见的用法是:

Set.toArray(new String[size])
Set.toArray(new String[0])

这两种用法的主要区别在于传递给 toArray 方法的数组的实际类型和大小。

Set.toArray(new String[size])

在这种情况下,你需要传递一个大小为 size 的数组,它将被用于存储集合的元素。
如果传递的数组大小小于集合的大小,那么将创建一个新数组,并将集合的元素存储在这个新数组中。如果传递的数组大小大于等于集合的大小,那么集合的元素将直接存储在这个数组中。
返回的数组类型是 String[]。

Set<String> stringSet = new HashSet<>();
// 添加元素到 stringSet
String[] array = stringSet.toArray(new String[stringSet.size()]);
Set.toArray(new String[0])

在这种情况下,你传递一个长度为0的数组。这样做的目的是告诉 toArray 方法返回一个新的与集合相同类型的数组。
如果传递的数组大小小于集合的大小,将创建一个新数组,其大小为集合的大小。
返回的数组类型是 String[]。

Set<String> stringSet = new HashSet<>();
// 添加元素到 stringSet
String[] array = stringSet.toArray(new String[0]);

在实际应用中,通常推荐使用第二种形式 Set.toArray(new String[0]),因为它更简洁,而且不需要显式指定数组的大小,而是由 toArray 方法自动处理。无论哪种方式,都能达到将集合元素转换为数组的目的。

Q:为什么Set.toArray(new String[0])更快,按道理告诉指定空间容量应该更快

在Java中,Set.toArray(new String[0]) 之所以被认为更优雅和推荐,是因为它在内部处理了数组大小的细节,而无需显式指定容量。这种方法的性能优势可能并不是因为它更快,而是因为它更简洁、易读,并且在实际使用中更为常见。

在理论上,Set.toArray(new String[size]) 和 Set.toArray(new String[0]) 两者的性能应该是相似的,因为它们的底层实现都会创建一个足够大的数组来容纳集合中的元素。但在实际情况中,Java 的一些实现可能对于传递长度为0的数组有一些优化,因为这样的传递方式表达了“返回一个新数组”的意图,而不需要关心具体的数组大小。

值得注意的是,关于性能的讨论通常需要基于具体的JVM实现和版本,因为不同的JVM可能会对相同的代码进行不同程度的优化。在一些情况下,微小的差异可能是不可预测的,并且可能因为具体的JVM版本而有所变化。

总体而言,选择使用 Set.toArray(new String[0]) 或 Set.toArray(new String[size]) 可以根据个人或团队的代码风格和偏好来决定,因为它们在性能上的差异通常是微不足道的。更重要的是编写清晰、易读的代码。

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

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

相关文章

记录一次docker搭建tomcat容器的网页不能访问的问题

tomcat Tomcat是Apache软件基金会的Jakarta项目中的一个重要子项目&#xff0c;是一个Web服务器&#xff0c;也是Java应用服务器&#xff0c;是开源免费的软件。它是一个兼容Java Servlet和JavaServer Pages&#xff08;JSP&#xff09;的Web服务器&#xff0c;可以作为独立的W…

故障排查:rpm安装报错事务锁定(can‘t create transaction lock on /var/lib/rpm/.rpm.lock)

博客主页&#xff1a;https://tomcat.blog.csdn.net 博主昵称&#xff1a;农民工老王 主要领域&#xff1a;Java、Linux、K8S 期待大家的关注&#x1f496;点赞&#x1f44d;收藏⭐留言&#x1f4ac; 目录 故障详情故障原因解决办法 故障详情 自己编写spec文件&#xff0c;制…

Redis链表使用

Redis是优秀的非关系型数据库&#xff0c;源码中的链表是很经典&#xff0c;将其提取使用 /* adlist.c - A generic doubly linked list implementation** Copyright (c) 2006-2010, Salvatore Sanfilippo <antirez at gmail dot com>* All rights reserved.** Redistri…

解密Kafka主题的分区策略:提升实时数据处理的关键

目录 一、Kafka主题的分区策略概述1.1 什么是Kafka主题的分区策略&#xff1f;1.2 为什么分区策略重要&#xff1f; 二、Kafka默认分区策略2.1 Round-Robin分区策略 三、自定义分区策略3.1 编写自定义分区器3.2 最佳实践&#xff1a;如何选择分区策略 四、分区策略的性能考量4.…

【开题报告】OFDM雷达捷变波形信号处理方法研究与仿真

选 题 的 目 的 和 意 义 随着现代科技的不断发展&#xff0c;汽车在人们生活中的比重越来越大&#xff0c;人们对汽车安全的要求越来越高。据统计&#xff0c;我国每年有近万人死于交通事故&#xff0c;汽车在行驶过程中容易出现车速过快、方向失控、侧滑等问题&#xff0c;随…

基于SSM健身房管理系统设计与实现

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本健身房管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

C#文件基本操作(判断文件是否存在、创建文件、复制或移动文件、删除文件以及获取文件基本信息)

目录 一、判断文件是否存在 1.File类的Exists()方法 2.FileInfo类的Exists属性 二、创建文件 1.File类的Create()方法 2.FileInfo类的Create()方法 三、复制或移动文件 1.File类的Copy()方法 2.File类的Move()方法 3.FileInfo类的CopyTo()方法 四、删除文件 1.File…

Linux:创建进程 -- fork,到底是什么?

相信大家在初学进程时&#xff0c;对fork函数创建进程一定会有很多的困惑&#xff0c;比如&#xff1a; 1.fork做了什么事情?? 2.为什么fork函数会有两个返回值?3.为什么fork的两个返回值&#xff0c;会给父进程谅回子进程pid&#xff0c;给子进程返回0?4.fork之后:父子进…

Webpack ECMAScript 模块

文章目录 前言标题一导出导入将模块标记为 ESM 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;webpack &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&a…

新手村之SQL——分组与子查询

1.GROUP BY GROUP BY 函数就是 SQL 中用来实现分组的函数&#xff0c;其用于结合聚合函数&#xff0c;能根据给定数据列的每个成员对查询结果进行分组统计&#xff0c;最终得到一个分组汇总表。 mysql> SELECT country, COUNT(country) AS teacher_count-> FROM teacher…

面试官:说一下ArrayList和LinkedList有什么区别 我:。。。。面试: 对了但是没全对

这是一个面试向的文章&#xff0c;主要描述我在面试某公司的一面的一个过程&#xff0c;印象深刻&#xff0c;故而写下这篇文章 面试官&#xff1a;说一下ArrayList和LinkedList有什么区别 我&#xff08;心里&#xff09;&#xff1a;简单&#xff0c;学过数据结构的都知道有…

【古月居《ros入门21讲》学习笔记】10_话题消息的定义与使用

目录 说明&#xff1a; 1. 话题模型 2. 实现过程&#xff08;C&#xff09; 自定义话题消息 Person.msg文件内容 Person.msg文件内容说明 编译配置 在package.xml文件中添加功能包依赖 在CMakeLists.txt中添加编译选项 编译生成语言相关文件 创建发布者代码&#xff…

关于最近Facebook的未经用户同意收集使用个人信息,

最近收到深圳市通信管理局的违法违规APP处置通知大概如下: 并且详细列举了 facebook sdk 在未经用户允许前调用的 TelephonyManager.getNetworkOperatorName(); 方法,获取运营商名称. 解决方法, 首先 在用户没有点击允许隐私条款前 不要调用任何Facebook sdk 方法,比如: Fac…

智慧科研助力科研数据的分析处理

如今&#xff0c;科研领域的发展日新月异&#xff0c;数据量也越来越大。这时&#xff0c;智慧科研可视化技术不仅为科研人员提供了快速高效的数据分析手段&#xff0c;而且为科研工作的推进提供了新的思路和方法。通过可视化手段&#xff0c;我们可以将各种数据、信息、知识以…

北京JAVA(HR)现状——自我感觉哈(娱乐版本)

主要针对 外包纯纯小公司&#xff08;就几个人&#xff0c;没大公司投资的那种&#xff0c;一般在20——99人&#xff09; 自我感觉自我感觉本人的主观意愿哈。 1.有统招本科的尽量找统招本科&#xff0c;没有的统招本科&#xff0c;找专科1年的 2.我问你&#xff1a;统招三…

助力企业实现更简单的数据库管理,ATOMDB 与 TDengine 完成兼容性互认

为加速数字化转型进程&#xff0c;当下越来越多的企业开始进行新一轮数据架构改造升级。在此过程中&#xff0c;全平台数据库管理客户端提供了一个集中管理和操作数据库的工具&#xff0c;提高了数据库管理的效率和便利性&#xff0c;减少了人工操作的复杂性和错误率&#xff0…

带大家做一个,易上手的家常土豆片

还是先从冰箱里那一块猪瘦肉 搞一点蒜和生姜 切成小块 装进一个碗里 这里一点就够了 一条绿皮辣椒 切片 三个左右干辣椒 随便切两刀 让它小一点就好了 一起装一个碗 一大一小两个土豆切片 猪肉切片 起锅烧油 然后 下肉翻炒 等肉变颜色捞出来 然后放入土豆 和小半碗水 让…

EBNF

EBNF 一、简介 句法元语言(Syntactic metalanguages)是计算机科学的重要工具是大家熟知的概念&#xff0c;因为使用了许略有不同的符号&#xff0c;导致句法元语言未能被广泛的使用。 EBNF(Extended BNF)引进一些句法的正式定义&#xff0c;从而广泛使用在编程语言的定义中。…

【漏洞复现】万户协同办公平台ezoffice SendFileCheckTemplateEdit.jsp接口存在SQL注入漏洞 附POC

漏洞描述 万户ezOFFICE协同管理平台是一个综合信息基础应用平台。 万户协同办公平台ezoffice SendFileCheckTemplateEdit.jsp接口存在SQL注入漏洞。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害…

HTML-标签之文字排版、图片、链接、音视频

1、标签语法 HTML超文本标记语言——HyperText Markup Language 超文本是链接标记也叫标签&#xff0c;带尖括号的文本 2、HTML基本骨架 HTML基本骨架是网页模板 html&#xff1a;整个网页head&#xff1a;网页头部&#xff0c;存放给浏览器看的代码&#xff0c;例如CSSbody…