4 Stimmen

Gibt es bei compareTo eine Art Vorlaufzeit für den Start?

Ich habe gerade diese Aussage gefunden: "Man kann die Leistung von compareTo erheblich steigern, wenn man zuerst die Elemente vergleicht, die sich am ehesten unterscheiden". Stimmt das? Und wenn ja, warum?

5voto

Péter Török Punkte 111735

Betrachten Sie eine Klasse mit mehreren Eigenschaften. Um Instanzen zu vergleichen, müssen Sie einige ihrer Eigenschaften vergleichen. Wenn alle Eigenschaften bis auf eine gleich sind, hängt die Anzahl der erforderlichen Vergleiche von der Reihenfolge der Eigenschaftsvergleiche ab: Wenn Sie die abweichenden Eigenschaften zuerst vergleichen, erhalten Sie das Ergebnis mit einem Vergleich. Wenn Sie jedoch die unterschiedlichen Eigenschaften zuletzt vergleichen, müssen Sie Folgendes tun n Vergleiche, um das gleiche Ergebnis zu erzielen.

Wie @Kdeveloper bemerkte, ist der Leistungsunterschied möglicherweise nicht spürbar, es sei denn, Sie führen viele ähnliche Vergleiche in Stapeln durch. Aber der andere Vorteil ist IMHO logische Anordnung : Das bringt Sie dazu, über die logische Beziehung zwischen den Klasseneigenschaften nachzudenken. Da es sich hierbei um eine nicht störende Optimierung handelt (d.h. sie macht den Code nicht schwieriger zu lesen und zu pflegen), lohnt es sich meiner Meinung nach, dies in den meisten Fällen zu tun.

1voto

Kdeveloper Punkte 13409

Ja, es ist wahr

Denn wenn Sie den selektivsten Vergleich an die erste Stelle setzen, werden Sie im Durchschnitt weniger Code für jeden Vergleich ausführen. Da diese Tests in der Regel sehr schnell sind, machen sich die Geschwindigkeitsverbesserungen nur bemerkbar, wenn Sie viele Objekte vergleichen, z. B. wenn Sie eine große Sammlung sortieren.

0voto

aioobe Punkte 397211

Stimmt das? Und wenn ja, warum?

Nun, wörtlich genommen, nein. Die compareTo Methode wird unabhängig von der Historie gleich lange für die Ausführung brauchen.

Ob sie bei einer bestimmten Implementierung eine bessere Gesamtleistung erbringen kann? Ja, mit Sicherheit. Um Ihre Frage beantworten zu können, benötigen wir jedoch mehr Informationen über die Situation.

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