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?
Antworten
Zu viele Anzeigen?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.
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.
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.