性能考虑,数组是首选
2015-10-31 19:03
197 查看
数组在实际的系统开发中用得越来越少了,我们通常只有在阅读一些开源项目时才会看到它们的身影,在Java中它确实没有List、Set、Map这些集合类用起来方便,但是在基本 类型处理方面,数组还是占优势的,而且集合类的底层也都是通过数组实现的,比如对一个数据集求和这样的计算:
//对数组求和
对一个int类型的数组求和,取出所有的数组元素并相加,此算法中如果是基本类型则使用数组效率是最高的,使用集合则效率次之。再看使用List求和:
//对列表求和计算
注意看加粗字体,这里其实已经做了一个拆箱动作,Integer对象通过intValue方法自 动转换成了一个int基本类型,对于性能濒于临界的系统来说该方案是比较危险的,特别是大数量的时候,首先,在初始化List数组时要进行装箱动作,把一个int类型包装成一个 Integei•对象,虽然有整型池在,但不在整型池范围内的都会产生一个新的Integer对象,而
且众所周知,基本类型是在栈内存中操作的,而对象则是在堆内存中操作的,栈内存的特点是速度快,容量小,堆内存的特点是速度慢,容量大(从性能上来讲,基本类型的处理占优 势)。其次,在进行求和计算(或者其他遍历计算)时要做拆箱动作,因此无谓的性能消耗也就产生了。
在实际测试中发现:对基本类型进行求和计算时,数组的效率是集合的10倍。
注意性能要求较高的场景中使用数组替代集合。
//对数组求和
<span style="font-size:18px;">public static int sum(int[] datas){ for(int i=0;i<datas.length;i++){ sum +=datas[i]; } return sum; }</span>
对一个int类型的数组求和,取出所有的数组元素并相加,此算法中如果是基本类型则使用数组效率是最高的,使用集合则效率次之。再看使用List求和:
//对列表求和计算
<span style="font-size:18px;">public static int sum{List<Integer> datas){ int sum =0; for(int i=0;i<datas.size();i++){ <strong>sum +=datas.get(i);</strong> } return sum; }</span>
注意看加粗字体,这里其实已经做了一个拆箱动作,Integer对象通过intValue方法自 动转换成了一个int基本类型,对于性能濒于临界的系统来说该方案是比较危险的,特别是大数量的时候,首先,在初始化List数组时要进行装箱动作,把一个int类型包装成一个 Integei•对象,虽然有整型池在,但不在整型池范围内的都会产生一个新的Integer对象,而
且众所周知,基本类型是在栈内存中操作的,而对象则是在堆内存中操作的,栈内存的特点是速度快,容量小,堆内存的特点是速度慢,容量大(从性能上来讲,基本类型的处理占优 势)。其次,在进行求和计算(或者其他遍历计算)时要做拆箱动作,因此无谓的性能消耗也就产生了。
在实际测试中发现:对基本类型进行求和计算时,数组的效率是集合的10倍。
注意性能要求较高的场景中使用数组替代集合。
相关文章推荐
- uva532Dungeon Master
- 动态链接库(DLL)总结---静态链接库的创建与使用(4)
- Your Server as a Function
- swift 快速奔跑的兔几 本节的内容是:应用程序沙盒
- 《leetCode》:Reverse Integer
- 开会 顺口溜
- ios打包ipa的四种实用方法(.app转.ipa)
- Android 通过 Intent 传递类对象
- JS内置对象
- HDU 5510 Bazinga
- C语言:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出'b'
- Android 代码混淆
- DW学习心得(3)
- GPS数据处理
- Hive数据倾斜
- 【数据加密】AES加密和解密安卓篇(一)
- iOS开发中正则式的使用
- assert()函数用法总结
- 英语这件小事
- poj3579,二分找答案,再二分查找