Java交换两个数的四种方法和效率

两个数交换的四种常用方法:
1.中间变量交换
2.加减减法交换
3.赋值交换
4.异或交换

以下是Java代码:

public static void main(String[] args){
    System.out.println();
    System.out.println();
    long start, end;
    int a = 10, b = 20;
    long count = 1000000000L;

    start = System.currentTimeMillis();
    for(long i = 0; i < count; i++){
        a = b + (b = a) * 0;
    }
    end = System.currentTimeMillis();
    a = b + (b = a) * 0;
    System.out.println("*******************************");
    System.out.println("a=" + a +" " + "b=" + b);
    System.out.println("1.赋值交换耗时:" + (end-start) + "ms");
    System.out.println("*******************************");
    a = 10; b = 20;  //恢复原a、b值

    start = System.currentTimeMillis();
    for(long i = 0; i < count; i++){
        a += b;
        b = a - b;
        a -= b;
    }
    end = System.currentTimeMillis();
    a += b;
    b = a -b;
    a -= b;
    System.out.println("a=" + a +" " + "b=" + b);
    System.out.println("2.加减减交换耗时:" + (end-start) + "ms");
    System.out.println("*******************************");
    a = 10; b = 20;  //恢复原a、b值

    start = System.currentTimeMillis();
    int t;
    for(long i = 0; i < count; i++){
        t = a;
        a = b;
        b = t;
    }
    end = System.currentTimeMillis();
    t = a;
    a = b;
    b = t;
    System.out.println("a=" + a +" " + "b=" + b);
    System.out.println("3.中间变量交换耗时:" + (end-start) + "ms");
    System.out.println("*******************************");
    a = 10; b = 20;  //恢复原a、b值

    start = System.currentTimeMillis();
    for(long i = 0; i < count; i++){
        a ^= b;
        b ^= a;
        a ^= b;
    }
    end = System.currentTimeMillis();
    a ^= b;
    b ^= a;
    a ^= b;
    System.out.println("a=" + a +" " + "b=" + b);
    System.out.println("4.异或交换耗时:" + (end-start) + "ms");
    System.out.println("*******************************");
}

结果输出:


a=20 b=10
1.赋值交换耗时:1124ms


a=20 b=10
2.加减减交换耗时:895ms


a=20 b=10
3.中间变量交换耗时:598ms


a=20 b=10
4.异或交换耗时:1475ms


猜你喜欢

转载自blog.csdn.net/u014259820/article/details/78880400