31 Stimmen

Wie lassen sich Zeichenketten in Java am schnellsten vergleichen?

Wie lassen sich zwei Strings in Java am schnellsten vergleichen?

Gibt es etwas, das schneller ist als Gleiches?

EDIT: Ich kann nicht viel helfen, um das Problem zu klären.

Ich habe zwei Strings, die alphabetisch sortiert sind und EXAKT die gleiche Größe haben

Beispiel: abbcee und abcdee

Strings können bis zu 30 Zeichen lang sein

1voto

Flow Punkte 22785

Einfache Antwort

String.equals(Object)

Ich bin mir ziemlich sicher ( diese Antwort enthält einige Hinweise ) und es ist sehr wahrscheinlich, dass das JIT einen intrinsischen für String#equals Das bedeutet, dass es in der Lage wäre, den Aufruf durch speziell für die Architektur, auf der Ihre JVM gerade läuft, erstellten Maschinencode zu ersetzen.

0voto

mikera Punkte 103423

Wie immer müssen Sie einen Benchmark für Ihre Anwendung/Umgebung durchführen. Und wenn Sie nicht bereits ein Profil erstellt und dies als Leistungsengpass identifiziert haben, wird es wahrscheinlich keine Rolle spielen ("Vorzeitige Optimierung ist die Wurzel allen Übels").

Dies vorausgeschickt:

a.equals(b) ist wirklich schnell für Streicher. Es handelt sich wahrscheinlich um eines der am stärksten optimierten Codestücke der Java-Plattform. Es würde mich sehr überraschen, wenn Sie einen schnelleren Weg finden, um zwei beliebige Strings zu vergleichen.

Es gibt Sonderfälle wo Sie schummeln und verwenden (a==b) sicher, z.B. wenn Sie wissen, dass beide Strings sind interniert (und daher impliziert Wertidentität Objektidentität). In diesem Fall kann es etwas schneller sein als a.equals(b) - aber das hängt wiederum von der Compiler/JVM-Implementierung ab. Und es ist sehr einfach, sich selbst in den Fuß zu schießen, wenn man nicht weiß, was man tut.....

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X