[改善Java代码]性能考虑,数组是首选

建议60:性能考虑,数组是首选

一、分析 

数组在实际的系统开发中使用的越来越少,我们通常只有在阅读一些开源项目时才会看到它们的身影,在Java中它确实没有List、Set、Map这些集合使用起来方便,但是在基本类型处理方面,数组还是占优势的,而且集合的底层也是通过数组实现。 

二、场景 

比如对一个数据集求和的计算

1 //对数组求和 
2 public static int sum(int[] datas){ 
3     int sum = 0; 
4     for(int i = 0; I < datas.length; I++){ 
5         sum += datas[i]; 
6     } 
7     return sum; 
8 } 

对于一个int类型的数组求和,取出所有元素的数组元素并相加,此算法中如果是基本类型则使用数组效率最高,使用集合效率次之.

1 //对列表求和计算 
2 public static int sum(List<Integer> datas){ 
3     int sum = 0; 
4     for(int i = 0; i < datas.size(); i++){ 
5         sum += datas.get(i); 
6     } 
7     return sum; 
8 } 

注意才相加求和的运算中,做了一个拆箱动作(sum += datas.get(i); ),这对于性能濒于临界的系统是比较危险的 

在初始化List的时候,要进行装箱动作,把一个int类型包装成一个Integer对象,虽然有整形池在,但不在整型池范围都会产生一个新的Integer对象  

众所周知,基本类型是在栈内存操作的,而对象则是在堆内存中操作的。栈内存的特点是速度快,容量小;堆内存的特点是速度慢,容量大(从性能上讲,基本类型的处理占优势)。

其次,在进行求和计算(或者其他遍历计算) 时要做拆箱动作,因此无谓的性能消耗也就产生了.

三、建议 

性能要求较高的场景中,使用数组替代集合。在实际测试中发现:对于基本类型进行求和计算时,数组的效率是集合的10倍。

 

转载于:https://www.cnblogs.com/DreamDrive/p/5418528.html

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

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

相关文章

编程语言也环保?C语言领跑,Python、Perl垫底

文 | Travis出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;毋庸置疑&#xff0c;Python 是世界上最流行的编程语言之一&#xff0c;其被广泛运用于人工智能、数据分析、网络爬虫和 Web 开发等领域。在上个月的 TIOBE 榜单中&#xff0c;Python 一举超过…

Android最全面试题71道题 详解

http://blog.csdn.net/superjunjin/article/details/7772030 Android面试题 1. 下列哪些语句关于内存回收的说明是正确的? (b ) A、 程序员必须创建一个线程来释放内存 B、 内存回收程序负责释放无用内存 C、 内存回收程序允许程序员直接释放内存 D、 内存回收程序可以在指定…

我靠“读书笔记”闷声赚3万:那些你看不上的行业,往往最赚钱

全世界只有3.14 % 的人关注了爆炸吧知识你有没有计算过&#xff1a;你的时间&#xff0c;值多少钱&#xff1f;如果你月薪5000&#xff0c;一个月工作20天&#xff0c;每天8小时&#xff0c;那么你1小时的价值就是32元。然而&#xff0c;现在请一个打扫卫生的钟点工&#xff0c…

12月16日课程安排

12/16: 6-8PM 新主楼 D218 讲座 1) 微软亚洲研究院的研究员 分享研究经验 (韩石 研究员) 2) 互联网创新公司的研发介绍 (王京: 应用汇首席工程师, 北航 6 系校友) 微软亚洲研究院的研究员建议大家先读一下这些文章: ICSE’12 paper on StackMine – Performance D…

C#元组类型System.ValueTuple

元组功能在 C# 7.0 及更高版本中可用&#xff0c;它提供了简洁的语法&#xff0c;用于将多个数据元素分组成一个轻型数据结构。元组功能需要 System.ValueTuple 类型和相关的泛型类型&#xff08;例如 System.ValueTuple<T1,T2>&#xff09;&#xff0c;这些类型在 .NET …

Cocoapods的安装和使用

一、Cocoapods的安装 第一步&#xff1a;打开终端 第二步&#xff1a;修改ruby镜像引用 gem source --remove https://rubygems.org/ gem sources -a http://ruby.taobao.org/ 完成后用命令行查看ruby镜像是否是taobao,用命令行&#xff1a; gem sources -l 返回信息为&#xf…

JAVA软件图片浏览下载_java模拟浏览器下载图片

/** * 抓取网上的图片 * param imgSrc * param filePath */ public static void downloadImgByNet(String imgSrc,String filePath,String fileName){ try{ URL url new URL(imgSrc); URLConnection conn url.openConnection(); //设置超时间为3秒 conn.setConnectTimeout(3*…

微信企业号开发之如何建立连接

http://www.07net01.com/2014/09/167991.html 连接将使你的企业号更具价值&#xff0c;你可以使用以下三种方式&#xff0c;连接你的企业号及企业应用&#xff1a; 1、企业应用调用企业号提供的接口&#xff0c;管理或查询企业号后台所管理的资源、或给成员发送消息等&#xff…

完全颠覆你世界观的10个科学实验!从此脑洞大开

全世界只有3.14 % 的人关注了爆炸吧知识这两天超模君逛知乎时&#xff0c;发现有人提问&#xff1a;“如何让孩子学会主动”&#xff1f;孩子学会主动是很重要的&#xff0c;特别是在学习方面&#xff0c;懂得主动学习无论是在小时候还是未来都很有优势。可能很多家长都有类似的…

js模版引擎handlebars.js实用教程——with-终极this应用

返回目录 1 <!DOCTYPE html>2 <html>3 <head>4 <META http-equivContent-Type content"text/html; charsetutf-8">5 <title>with-终极this应用 - by 杨元</title>6 </head>7 <body>8 <h1>w…

大学

(一才女博客看来的&#xff0c;不错&#xff0c;意境很浓)大一&#xff0c;年少春衫薄。骑马倚斜桥&#xff0c;满楼红袖招。一朝看尽长安花。大二&#xff0c;春日游&#xff0c;杏花插满头。谁家年少足风流&#xff0c;妾身欲语还休。大三&#xff0c;男儿立志出乡关&#xf…

c# 弹性和瞬态故障处理库Polly

关于pollypolly文档中对自己介绍的原文是:Polly is a .NET resilience and transient-fault-handling library that allows developers to express policies such as Retry,Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner.从…

MySQL账户安全设置

一般来说&#xff0c;安装完MySQL后&#xff0c;默认的用户是root,密码123456&#xff0c;外网不能访问。 有时候也希望在外网访问&#xff0c;则可以添加一个账户。建议不要用root。 如下表&#xff0c;存在安全问题&#xff1a; mysql> select host,user,password from us…

Android之Android Studio--Gradle多渠道打包

于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了。 友盟多渠道打包 废话不多说,以友盟统计为例,在AndroidManifest.xml里面会有这么一段: <…

char varchar java_在数据库中varchar与char的区别

char是固定长度类型varchar是可变的长度类型char和varchar类型相似&#xff0c;但是它们的存储和检索方式不同。在MySQL5.0.3&#xff0c;它们在最大长度和是否保留尾部空格也不相同。char和varchar定义了字符串的最大长度。例如&#xff0c;char(30)可以放30个字符。char列的长…

鄙人之斗,读IT之洋(1)

C#&#xff1a; 自己从最初的参加项目&#xff0c;只懂前台布局如何美观&#xff0c;怎样能将<border>边框整体去除&#xff0c;到如今能够在model,dal,web三层之间游走穿梭&#xff0c;谁又知道中间经历了多少&#xff0c;苦与酸&#xff0c;汗水&#xff0c;快乐&#…

震撼世界的基建狂魔,中国制造的超级工程到底有多牛?

全世界只有3.14 % 的人关注了数据与算法之美1949年的中华大地上一无所有&#xff0c;而现在一栋栋高楼伫立在这片土地上的时候不禁感叹&#xff0c;到底是什么支撑着让我们从一片荒漠变成如今高楼耸立&#xff1f;今天小编带来的这部纪录片《超级工程》&#xff0c;带你认识被称…

C# WPF图表控件之ChartControl用法指南①

“ 引言部分&#xff0c;总领全篇文章的中心内容。”WPF的DevExpress ChartControl是一种功能强大的可视化工具&#xff0c;可帮助您将数据显示为二维或伪三维条形图、区域、线和许多其他形式。01—将数据绑定到Chart SeriesStep 1. 创建新项目并添加图表创建一个新的WPF应用程…

Android之SwipeRefreshLayout

wipeRefreshLayout字面意思就是下拉刷新的布局,继承自ViewGroup,在support v4兼容包下,但必须把你的support library的版本升级到19.1。 提到下拉刷新大家一定对ActionBarPullToRefresh比较熟悉,而如今google推出了更官方的下拉刷新组件,这无疑是对开发者来说比较好的消…

网络传输中的反码求和算法

在发送数据&#xff0c;计算数据包的校验和&#xff0c;按如下步骤&#xff1a; 1、把校验和字段置为0&#xff1b; 2、把需校验的数据看成以16位为单位的数字组成&#xff0c;依次进行二进制反码求和&#xff1b; 3、把得到的结果存入校验和字段中。 在接收数据时&#xff0c;…