实验:三种变量交换方法的时间效率对比

本贴最后更新于 1220 天前,其中的信息可能已经时移世改

1、变量的三种交换方式

1.1、借助中间变量

long n = 34156236589564L;
long m = 65485695632451L;
long temp;
temp = n;
n = m;
m = temp;

1.2、使用加减运算

long n = 34156236589564L;
long m = 65485695632451L;
n = n + m;
m = n - m;
n = n - m;

1.3、使用异或运算

long n = 34156236589564L;
long m = 65485695632451L;
n = n ^ m;
m = n ^ m;
n = n ^ m;

2、测试代码

/**
     * 测试三种交换变量的方法各自的运行时间效率
     */
    public static void test(){
        //待交换的连个变量
        long n = 34156236589564L;
        long m = 65485695632451L;
        //循环50亿次
        long o = 5000000000L;
        long v = 0;
        //中间变量
        long temp;
        long t1 = System.currentTimeMillis();
        //【第一种方式】
        //借用中间变量交换
        //这种变量交换的方式语义上相对好理解
        //通过测试,运行效率在这三种当中相对最好
        while (v < o){
            temp = n;
            n = m;
            m = temp;
            v++;
        }
        v = 0;
        long t2 = System.currentTimeMillis();
        //【第二种方式】
        //用加减法变量交换
        //这种方式容易产生溢出
        //通过测试,运行效率相对第一种较差
        while (v < o){
            n = n + m;
            m = n - m;
            n = n - m;
            v++;
        }
        v = 0;
        long t3 = System.currentTimeMillis();
        //【第三种方式】
        //借用异或变量交换
        //使用位运算来实现变量的交换
        //通过测试,运行效率相对第一种较差,相对第二种几乎一样
        while (v < o){
            n = n ^ m;
            m = n ^ m;
            n = n ^ m;
            v++;
        }
        long t4 = System.currentTimeMillis();
        System.out.println("借用中间变量交换所花时间:" + (t2 - t1));
        System.out.println("用加减法变量交换所花时间:" + (t3 - t2));
        System.out.println("借用异或变量交换所花时间:" + (t4 - t3));
    }

    public static void main(String[] args) {
        test();
    }

3、运行结果(毫秒)

借用中间变量交换所花时间:1633
用加减法变量交换所花时间:3237
借用异或变量交换所花时间:3226

4、结论

运这三种方式的运行时间效率:第一种方式 > 第二种方式 , 第二种和第三种效率相当。
在实验之前,一般直觉,认为位运算的效率会更高,但是通过实验表名,通过中间变量的方式,运算效率是最高的。
这是为什么呢?目前还不清楚,有待进一步思考和理解。。。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3167 引用 • 8207 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...