前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java-程序运行时间检测实例-字符串叠加与两个变量交换数据

java-程序运行时间检测实例-字符串叠加与两个变量交换数据

作者头像
用户7886150
修改2020-12-11 14:25:43
4630
修改2020-12-11 14:25:43
举报
文章被收录于专栏:bit哲学院

参考链接: 交换两个字符串,而无需在Java中使用第三个用户定义的变量

上篇文章介绍了用System.currentTimeMillis()方法检测运行时间的用法,这篇文章结合两个实际例子,看一下实际效果;同时体会这两个例子给出的不同算法之间的差别。 

1. 字符串叠加 

在《Thinking in java》里,作者着重强调了,字符串叠加的时候,尽量使用StringBuilder,相对于直接使用String.append()可以提高效率。那么究竟差别有多少,我们来看下面的例子: 

public static void main(String[]args)

    {

        String str="";

        long starTime=System.currentTimeMillis();

        //计算循环10000的时间

        for(int i=0; i<10000; i++)

        {

            str=str+i;

        }

        long endTime=System.currentTimeMillis();

        long Time=endTime-starTime;

        System.out.println(Time);

        StringBuilder bulider=new StringBuilder("");

        starTime=System.currentTimeMillis();

        for(int j=0; j<10000000; j++)

        {

            bulider.append(j);

        }

        endTime=System.currentTimeMillis();

        Time=endTime-starTime;

        System.out.println(Time);

    } 

这样的输出效果,在我的电脑上是二者差不多,300多毫秒!这个差距惊到我了! 

2.两个变量交换数据 

首先介绍一下三种变量交换数据的方法: 

(1)借用中间值(最经典的方法了) 

int x = 10,y = 5;

int temp = x;

x = y;

y = temp; 

(2)加减交换 

int x =10,y=5; //定义两个变量    

x = x + y;        //求二者和;

y = x - y;        //x的值赋给y;

x = x - y;        //y的值赋给x; 

这种方法不用单独创建额外的变量,弊端在于如果 x 和 y 的数值过大的话,超出 int 的值会损失精度。 

(3)异或运算 

利用的原理是:一个数异或同一个数两次,结果还是那个数 

int x =5,y=10; //定义两个变量

x = x^y;

y = x^y;  //y=(x^y)^y

x = x^x;  //x=(x^y)^x 

这样不会超出int范围。 

(4)运行效率 

下面看下三者的运行速度如何: 

public static void main(String[]args)

    {

        int x = 10, y = 5;

        long starTime=System.currentTimeMillis();

        //计算循环10000的时间

        for(int i=0; i<1000000; i++)

        {

            int temp = x;

            x = y;

            y = temp;

        }

        long endTime=System.currentTimeMillis();

        long Time=endTime-starTime;

        System.out.println(Time);

        starTime=System.currentTimeMillis();

        //计算循环10000的时间

        for(int i=0; i<1000000; i++)

        {

            x = x + y;        //求二者和;

            y = x - y;        //x的值赋给y;

            x = x - y;        //y的值赋给x;

        }

        endTime=System.currentTimeMillis();

        Time=endTime-starTime;

        System.out.println(Time);

        starTime=System.currentTimeMillis();

        //计算循环10000的时间

        for(int i=0; i<1000000; i++)

        {

            x = x^y;

            y = x^y;  //y=(x^y)^y

            x = x^x;  //x=(x^y)^x

        }

        endTime=System.currentTimeMillis();

        Time=endTime-starTime;

        System.out.println(Time);

    } 

看运行结果:    哈哈,实际结果相差不大!看来这几种方式运行效率差不多,差的是内存开支等问题吧! 

3.参考链接 

java如何计算程序运行时间:https://zhidao.baidu.com/question/560976550653732724.html  两个变量交换的四种方法(Java):http://www.cnblogs.com/Brad-Lee/p/5808299.html  Java 位运算(移位、位与、或、异或、非):http://aijuans.iteye.com/blog/1850655

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档