天天看点

Java字符串反转的几种方法 数冒泡对调效率最佳了

字符串反转应该是比较常碰见的问题,今天我们来练一练 多种算法的效率如何

有递归法(不推荐)、数组倒序拼接、冒泡对调、使用StringBuffer的reverse方法等。

//递归方法
public static String reverse1(String s) {
    int length = s.length();
    if (length <= 1) {
        return s;
    }
    String left = s.substring(0, length / 2);
    String right = s.substring(length / 2, length);
    return reverse1(right) + reverse1(left);
}
           

递归的时间复杂度太高了,而且会随着字符串的长度增加而增加,效率差。

//字符串转换成字符数组倒序拼接
public static String reverse2(String s) {
    char[] array = s.toCharArray();
    StringBuilder reverse = new StringBuilder();
    for (int i = array.length - 1; i >= 0; i--)
        reverse.append(array[i]);
    return reverse.toString();
}
           

倒序拼接应该注意不用直接使用String拼接,应该使用StringBuilder,否则随着字符串的长度增加,两者的效率会很明显拉大。

//冒泡对调
public static String reverse3(String orig) {
    char[] s = orig.toCharArray();
    int n = s.length - 1;
    int halfLength = n / 2;
    for (int i = 0; i <= halfLength; i++) {
        char temp = s[i];
        s[i] = s[n - i];
        s[n - i] = temp;
    }
    return new String(s);
}
           

冒泡排序法应该是很常见的算法,永远记得当初C++老师教的时候,说 三个等号 搞定哈哈哈哈

//调用StringBuffer中的reverse方法
public static String reverse4(String s) {
    return new StringBuffer(s).reverse().toString();
}
           

这个方法是最简单的,一行代码搞定!

那么这四种算法 肯定有效率高低之分了,不然不同算法也没有意义了。

笔者使用 26位英文字符作为输入,看下执行一遍的时间,不能说明哪种速度快

Java字符串反转的几种方法 数冒泡对调效率最佳了

那么执行百万次呢?试试五百万次

Java字符串反转的几种方法 数冒泡对调效率最佳了

足以说明 递归真的速度慢,还属冒泡的速度最快效率最高了。好啦,实验结束哈哈哈哈不喜勿喷噢

继续阅读