📜  如何优化Java中的字符串连接?

📅  最后修改于: 2022-05-13 01:55:50.810000             🧑  作者: Mango

如何优化Java中的字符串连接?

字符串被定义为字符数组。字符数组和字符串的区别在于字符串以特殊字符“\0”结尾。由于数组是不可变的(不能增长),字符串也是不可变的。每当对 String 进行更改时,都会创建一个全新的 String。

连接是端到端连接的过程。让我们举个例子来理解连接在英语中的含义。

Person 1 speaking to Person 2 - ItsCodingEra
Person 2 speaking to Person 1 - 2020India


Now, let us carry a process whose output is as follows- ItsCodingEra2020India

This process is called concatenation.

例子:

Input String = "Geeks" + "for" + "Geeks";
OutputString = "GeeksforGeeks" ;

我们可以通过多种方式告诉计算机这样做,这些方式称为方法。让我们描述计算机如何通过我们的方法以不同的方式执行操作。

此操作可以通过 4 种方法进行

  • 使用“+”运算符
  • 使用concat()内置方法
  • 使用StringBuilder
  • 使用字符串缓冲区

让我们一一描述和实现它们。

方法 1:使用 '+' 运算符的字符串连接

Java
// Java program to concatenate string
import java.lang.*;
  
class GFG {
  
    public static void main(String[] args)
    {
        String str = "";
  
        // timer-start time
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 100000; i++) {
            // string concatenation
            str += Integer.toString(0);
        }
  
        // timer-end time
        long endTime = System.currentTimeMillis();
  
        // display the result
        System.out.println(
            "Time taken to concatenate 100000 Strings using '+' operator : "
            + (endTime - startTime) + " ms");
    }
}


Java
// Java program to concatenate string
import java.lang.*;
  
class GFG {
    public static void main(String[] args)
    {
        String str = "";
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 100000; i++) {
            str.concat(Integer.toString(0));
        }
  
        long endTime = System.currentTimeMillis();
        System.out.println(
            "Time taken to concatenate 100000 Strings using concat() method : "
            + (endTime - startTime) + " ms");
    }
}


Java
// Java program to concatenate string
import java.lang.*;
  
class GFG {
    public static void main(String[] args)
    {
        StringBuilder str = new StringBuilder();
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 100000; i++) {
            str.append(0);
        }
        long endTime = System.currentTimeMillis();
        System.out.println(
            "Time taken to concatenate 100000 Strings using StringBuilder append : "
            + (endTime - startTime) + " ms");
    }
}


Java
// Java program to concatenate string
import java.lang.*;
  
class GFG {
    public static void main(String[] args)
    {
        StringBuffer str = new StringBuffer();
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 100000; i++) {
            str.append(0);
        }
  
        long endTime = System.currentTimeMillis();
  
        System.out.println(
            "Time taken to concatenate 100000 Strings using StringBuffer append : "
            + (endTime - startTime) + " ms");
    }
}


输出
Time taken to concatenate 100000 Strings using '+' operator : 2126 ms

方法二:使用 concat() 内置函数

Concat(String str) 方法将指定的 String 连接到此字符串的末尾。此方法在给定字符串的末尾附加指定的字符串并返回组合字符串。

例子 :

String str="GeeksforGeeks";
s1 = s1.concat(".").concat("com");

Java

// Java program to concatenate string
import java.lang.*;
  
class GFG {
    public static void main(String[] args)
    {
        String str = "";
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 100000; i++) {
            str.concat(Integer.toString(0));
        }
  
        long endTime = System.currentTimeMillis();
        System.out.println(
            "Time taken to concatenate 100000 Strings using concat() method : "
            + (endTime - startTime) + " ms");
    }
}
输出
Time taken to concatenate 100000 Strings using concat() method : 46 ms

方法 3:通过使用 StringBuilder(最佳方式)

StringBuilder表示一个可变的字符序列。由于Java中的 String Class 创建了一个不可变的字符序列,StringBuilder 类提供了 String Class 的替代方案,因为它创建了一个可变的字符序列。

例子 :

StringBuilder str  = new StringBuilder();  
str.append("GFG");

使用 StringBuilder 方法连接的时间复杂度:

Java

// Java program to concatenate string
import java.lang.*;
  
class GFG {
    public static void main(String[] args)
    {
        StringBuilder str = new StringBuilder();
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 100000; i++) {
            str.append(0);
        }
        long endTime = System.currentTimeMillis();
        System.out.println(
            "Time taken to concatenate 100000 Strings using StringBuilder append : "
            + (endTime - startTime) + " ms");
    }
}
输出
Time taken to concatenate 100000 Strings using StringBuilder append : 34 ms

方法 4:通过使用 StringBuffer

StringBuffer是 String 的对等类,它提供了字符串的大部分功能。字符串表示固定长度的、不可变的字符序列,而 StringBuffer 表示可增长和可写的字符序列。

例子 :

StringBuffer s = new StringBuffer("GeeksforGeeks");

Java

// Java program to concatenate string
import java.lang.*;
  
class GFG {
    public static void main(String[] args)
    {
        StringBuffer str = new StringBuffer();
        long startTime = System.currentTimeMillis();
  
        for (int i = 0; i < 100000; i++) {
            str.append(0);
        }
  
        long endTime = System.currentTimeMillis();
  
        System.out.println(
            "Time taken to concatenate 100000 Strings using StringBuffer append : "
            + (endTime - startTime) + " ms");
    }
}
输出
Time taken to concatenate 100000 Strings using StringBuffer append : 41 ms