如何优化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