java 使用简单的demo实例告诉你优化算法的强大

这里的demo是一个累加算法,如1,2,3,4.....n

即:sum = 1+2+3+4......+n;

我们可以这样做:


代码如下:

/**
      * 循环实现累加方法
      * @param value
      * @return
      */
     private static long cycle(long value) {
         long sum = 0;

for (long i = 1,v = value; i <= v; i++) {
             sum += i;
         }
         return sum;
     }

另一种方法(高斯方法):


代码如下:

/**
      * 高斯方法:<code>(n+1)*n/2</code><br>
      * you can read more from <a href="http://zhidao.baidu.com/question/411055258.html">Here</a>
      * @param value
      * @return
      */
     private static long gaosi(long value) {
         long sum = 0;
         sum = (value + 1) * value / 2;
         return sum;
     }

我们可以写一个demo来测试他们的差别:


代码如下:

/**
  *
  */
 package com.b510.arithmetic;

/**
  * 累加算法实现<br>
  *
  * @date 2013-4-16
  * @author hongten
  *
  */
 public class AddArithmetic {

/**
      * 循环实现累加方法
      * @param value
      * @return
      */
     private static long cycle(long value) {
         long sum = 0;

for (long i = 1,v = value; i <= v; i++) {
             sum += i;
         }
         return sum;
     }

/**
      * 高斯方法:<code>(n+1)*n/2</code><br>
      * you can read more from <a href="http://zhidao.baidu.com/question/411055258.html">Here</a>
      * @param value
      * @return
      */
     private static long gaosi(long value) {
         long sum = 0;
         sum = (value + 1) * value / 2;
         return sum;
     }

public static void main(String[] args) {
         //清理一下内存,但不一定会执行
         System.gc();
         // you should change value,then get the different results
         long value = 10000000;
         long sum = 0;
         long start = System.currentTimeMillis();
         sum = cycle(value);
         long end = System.currentTimeMillis();
         System.out.println("使用循环累加方法从[1]累加到["+value+"]用时 : ["+(end - start) + "]ms,结果:"+ sum);
         //清理一下内存,但不一定会执行
         System.gc();
         start = System.currentTimeMillis();
         sum = gaosi(value);
         end = System.currentTimeMillis();
         System.out.println("使用高斯方法从[1]累加到["+value+"]用时 : ["+(end - start) + "]ms,结果:"+ sum);

}

}

你可以改变main方法中的value的值,来测试他们所消耗的系统时间....

当然不同配置的机器运行结果是不一样的...

我机器运行情况:


代码如下:

使用循环累加方法从[1]累加到[10000000]用时 : [24]ms,结果:50000005000000
使用高斯方法从[1]累加到[10000000]用时 : [0]ms,结果:50000005000000

(0)

相关推荐

  • Java编程代码性能优化

    一.咱们之所以这么干的目的: 1.效率(最重要) 2.可读性,便于后期维护.(同样很重要) 二.代码优化的要求: 1.减小代码的体积. 2.提高代码的运行效率. 三.常用的代码的优化: 1.尽量重用对象 : 特别是String对象的重用.最常用的就是字符串的拼接: 当遇到频繁擦拼接String时.记住一定用StringBuilder/StringBuffer 例如: ArrayList<String> list; //省去list初始化. StringBuilder builder = new

  • Java虚拟机JVM性能优化(二):编译器

    本文将是JVM 性能优化系列的第二篇文章(第一篇:传送门),Java 编译器将是本文讨论的核心内容. 本文中,作者(Eva Andreasson)首先介绍了不同种类的编译器,并对客户端编译,服务器端编译器和多层编译的运行性能进行了对比.然后,在文章的最后介绍了几种常见的JVM优化方法,如死代码消除,代码嵌入以及循环体优化. Java最引以为豪的特性"平台独立性"正是源于Java编译器.软件开发人员尽其所能写出最好的java应用程序,紧接着后台运行的编译器产生高效的基于目标平台的可执行代

  • Java代码优化细节

    代码优化细节  1.尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的.为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写.如果指定了一个类为final,则该类所有的方法都是final的.Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大 2.尽量重用对象  特别是String对象的

  • Java虚拟机JVM性能优化(一):JVM知识总结

    Java应用程序是运行在JVM上的,但是你对JVM技术了解吗?这篇文章(这个系列的第一部分)讲述了经典Java虚拟机是怎么样工作的,例如:Java一次编写的利弊,跨平台引擎,垃圾回收基础知识,经典的GC算法和编译优化.之后的文章会讲JVM性能优化,包括最新的JVM设计--支持当今高并发Java应用的性能和扩展. 如果你是一个开发人员,你肯定遇到过这样的特殊感觉,你突然灵光一现,所有的思路连接起来了,你能以一个新的视角来回想起你以前的想法.我个人很喜欢学习新知识带来的这种感觉.我已经有过很多次这样

  • Java性能优化技巧汇总

    本文实例汇总了Java性能优化技巧.分享给大家供大家参考.具体分析如下: 这里参考了些书籍,网络资源整理出来,适合于大多数Java应用 在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1.尽量使用final修饰符. 带有final修饰符的类是不可派生的.在JAVA核心API中,有许多应用final的例子,例如java.lang.String.为String类指定final防止了使用者覆盖length()方法.另外,如

  • Java中String性能优化

    不用使用String的构造函数,可能的话直接使用字符串. 两个特例: 1)想把char []转换为一个String, 2) 使用一个大的String对象的substring()方法: String.equals() 比 String.equalsIgnoreCase()要快: 尽量使用StringBuilder来构造一个String,而不是"+"操作符和String.concat() (除非是一个表达式,String s = a + b + c): StringBuilder是不同步的

  • 29个要点帮你完成java代码优化

    通过java代码规范来优化程序,优化内存使用情况,防止内存泄露 可供程序利用的资源(内存.CPU时间.网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率.本文讨论的主要是如何提高代码的效率. 在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身.养成好的代码编写习惯非常重要,比如正确地.巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的

  • java优化hibernate性能的几点建议

    1 <property name="hibernateProperties"> 2 <props> 3 <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop> 4 <prop key="hibernate.show_sql">false</prop> 5 <!-- Create/

  • Java虚拟机JVM性能优化(三):垃圾收集详解

    Java平台的垃圾收集机制显著提高了开发者的效率,但是一个实现糟糕的垃圾收集器可能过多地消耗应用程序的资源.在Java虚拟机性能优化系列的第三部分,Eva Andreasson向Java初学者介绍了Java平台的内存模型和垃圾收集机制.她解释了为什么碎片化(而不是垃圾收集)是Java应用程序性能的主要问题所在,以及为什么分代垃圾收集和压缩是目前处理Java应用程序碎片化的主要办法(但不是最有新意的). 垃圾收集(GC)的目的是释放那些不再被任何活动对象引用的Java对象所占用的内存,它是Java

  • 总结Java集合类操作优化经验

    在实际的项目开发中会有很多的对象,如何高效.方便地管理对象,成为影响程序性能与可维护性的重要环节.Java 提供了集合框架来解决此类问题,线性表.链表.哈希表等是常用的数据结构,在进行 Java 开发时,JDK 已经为我们提供了一系列相应的类来实现基本的数据结构,所有类都在 java.util 这个包里,清单1 描述了集合类的关系. 清单 1.集合类之间关系 Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map

随机推荐