zoukankan      html  css  js  c++  java
  • [改善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倍。

  • 相关阅读:
    hdu 1312 Red and Black
    hdu 1573 X问题
    广工校赛决赛之简单的数论题
    最大的LeftMax与rightMax之差绝对值
    POJ 2385 Apple Catching
    hdu 1171 Big Event in HDU
    ACM比赛经验
    BestCoder Valentine's Day Round
    使用ffmpeg进行视频封面截取
    使用ODP.NET连接Oracle数据库
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/5418528.html
Copyright © 2011-2022 走看看