如何优化Java中的字符串创建?
new运算符通过运算符新对象动态分配(即在运行时分配)内存并返回对该内存的引用来实例化一个类。然后将该引用存储在变量中。 new运算符之后还调用类构造函数,该构造函数初始化新对象。由于字符串创建是在 O(n) 时间复杂度中最佳工作的过程,其中 n 是字符串的长度。
执行时间可能会根据计算机的性能而有所不同。
例子 :
String str = new String("GeeksforGeeks");
使用 new 创建 String 所需的时间:
Java
// String creation using new keyword
import java.lang.*;
class GFG {
public static void main(String[] args)
{
// Array of string
String str[] = new String[50000];
// Clock starts
long startTime = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {
// Create new String object and copy
str[i] = new String("GeeksforGeeks");
}
// End Clock
long endTime = System.currentTimeMillis();
// Print Time
System.out.println(
"Creation time of String using 'new' keyword : "
+ (endTime - startTime) + " ms");
}
}
Java
// String creation using intern() method
import java.lang.*;
class GFG {
public static void main(String[] args)
{
// Array of String
String str[] = new String[50000];
// Clock Starts
long startTime = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {
// Create new String object and copy
str[i] = new String("GeeksforGeeks");
// Use of intern()
str[i] = str[i].intern();
}
// End Clock
long endTime = System.currentTimeMillis();
// Print Time
System.out.println(
"Creation time of String objects with intern() : "
+ (endTime - startTime) + " ms");
}
}
Java
// String creation using literals
import java.lang.*;
class GFG {
public static void main(String[] args)
{
// Array of String
String str[] = new String[50000];
// Clock starts
long startTime = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {
str[i] = "GeeksforGeeks";
}
// End Clock
long endTime = System.currentTimeMillis();
// Print Time
System.out.println(
"Creation time of String literals : "
+ (endTime - startTime) + " ms");
}
}
输出
Creation time of String using 'new' keyword : 12 ms
如何优化字符串创建?
1. 通过使用 String.intern() 方法:
String.intern()仅存储每个不同字符串值的一个副本的方法,该值必须是不可变的。如果它是由新关键字创建的,则它可用于从内存中返回字符串。它在字符串常量池中创建堆字符串对象的精确副本。
句法 :
public String intern()
返回:实习字符串。
使用 intern() 方法创建 String 所需的时间:
Java
// String creation using intern() method
import java.lang.*;
class GFG {
public static void main(String[] args)
{
// Array of String
String str[] = new String[50000];
// Clock Starts
long startTime = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {
// Create new String object and copy
str[i] = new String("GeeksforGeeks");
// Use of intern()
str[i] = str[i].intern();
}
// End Clock
long endTime = System.currentTimeMillis();
// Print Time
System.out.println(
"Creation time of String objects with intern() : "
+ (endTime - startTime) + " ms");
}
}
输出
Creation time of String objects with intern() : 20 ms
带有intern( )的对象的创建时间和带有 'new' 关键字的对象的创建时间在彼此的创建时间附近波动。
2. 通过使用字符串字面量:
字符串字面量应该用双引号括起来。每当它在程序员的代码中遇到字符串字面量时,编译器都会创建一个带有其值的 String 对象。
这是创建字符串的最快方式。
例子 :
String literal = "GeeksforGeeks";
使用字面量创建 String 所需的时间:
Java
// String creation using literals
import java.lang.*;
class GFG {
public static void main(String[] args)
{
// Array of String
String str[] = new String[50000];
// Clock starts
long startTime = System.currentTimeMillis();
for (int i = 0; i < 50000; i++) {
str[i] = "GeeksforGeeks";
}
// End Clock
long endTime = System.currentTimeMillis();
// Print Time
System.out.println(
"Creation time of String literals : "
+ (endTime - startTime) + " ms");
}
}
输出
Creation time of String literals : 9 ms