Es ist bereits vor langer Zeit allgemein bekannt (* um Java 1.5), dass "String-Joins nicht" + "sind, aber die Verwendung von StringBuffer den Prozess beschleunigt." Daher verwende ich im Grunde immer noch StringBuffer und StringBuilder für die Verkettung von Zeichenfolgen, aber ich fragte mich plötzlich: "Wie schnell ist die Verarbeitungsgeschwindigkeit der concat-Methode der String-Klasse?". Diesmal also diese Verarbeitungsgeschwindigkeiten Ich habe versucht zu vergleichen.
StringTest.java
public class StringTest {
public static void main(String[] args) {
plus();
concat();
builder();
buffer();
}
public static void plus() {
long start = System.currentTimeMillis();
String txt = "abc";
for (int i=0; i<100000; i++) {
txt += "abc";
}
long end = System.currentTimeMillis();
System.out.println("+:" + (end - start) + "ms");
}
public static void concat() {
long start = System.currentTimeMillis();
String txt = "abc";
for (int i=0; i<100000; i++) {
txt = txt.concat("abc");
}
long end = System.currentTimeMillis();
System.out.println("concat:" + (end - start) + "ms");
}
public static void builder() {
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder("abc");
for (int i=0; i<100000; i++) {
sb.append("abc");
}
String txt = sb.toString();
long end = System.currentTimeMillis();
System.out.println("StringBuilder:" + (end - start) + "ms");
}
public static void buffer() {
long start = System.currentTimeMillis();
StringBuffer sb = new StringBuffer("abc");
for (int i=0; i<100000; i++) {
sb.append("abc");
}
String txt = sb.toString();
long end = System.currentTimeMillis();
System.out.println("StringBuffer:" + (end - start) + "ms");
}
}
Inhalte verarbeiten | Verarbeitungszeit |
---|---|
+Kombiniert von | 7439ms |
String.concat()Kombiniert von | 2990ms |
Treten Sie mit StringBuilder bei | 2ms |
Join von StringBuffer | 4ms |
String.concat()
String.Auszug aus der Klasse
//Quelle, die mit dem Eclipse Class Decompiler-Plugin erhalten wurde.
public final class String implements Serializable, Comparable<String>, CharSequence {
private final char[] value;
public String concat(String arg0) {
int arg1 = arg0.length();
if(arg1 == 0) {
return this;
} else {
int arg2 = this.value.length;
char[] arg3 = Arrays.copyOf(this.value, arg2 + arg1);
arg0.getChars(arg3, arg2);
return new String(arg3, true);
}
}
void getChars(char[] arg0, int arg1) {
System.arraycopy(this.value, 0, arg0, arg1, this.value.length);
}
}
Die Java-Sprache bietet spezielle Unterstützung für String-Verkettungsoperatoren (+) und andere Objekt-zu-String-Konvertierungen. Die Verkettung von Zeichenfolgen wird mithilfe der Klasse StringBuilder (oder StringBuffer) und ihrer Append-Methode implementiert.
Recommended Posts