Angenommen, ich habe eine Java ArrayList, die sortiert ist. Jetzt möchte ich den Index des Wertes x finden. Was wäre der schnellste (ohne mehr als 30 Zeilen Code) Weg, dies zu tun? Verwendung der IndexOf() Methode? Durch alle Werte in einer einfachen for-Schleife? Verwendung eines coolen Algorithmus? Wir sprechen von etwa 50 ganzzahligen Schlüsseln.Der beste Weg, um Wert in Liste zu finden, wenn die Liste sortiert ist
Antwort
Binary search, aber da es nur 50 Elemente sind, wen interessiert es (es sei denn, Sie müssen es millionenfach tun)? Eine einfache lineare Suche ist einfacher und der Leistungsunterschied für 50 Elemente ist vernachlässigbar.
Bearbeiten: Sie können auch die integrierte Methode java.util.Collections binarySearch verwenden. Beachten Sie, dass ein Einfügepunkt zurückgegeben wird, auch wenn das Element nicht gefunden wird. Möglicherweise müssen Sie einige zusätzliche Überprüfungen durchführen, um sicherzustellen, dass der Artikel wirklich der gewünschte ist. Danke an @Matthew für den Zeiger.
tvanfosson hat Recht, dass die Zeit für beide sehr niedrig sein wird, also wenn dieser Code nicht sehr häufig läuft, wird es keinen großen Unterschied machen.
Java verfügt jedoch über integrierte Funktionen für die Binärsuche von Listen (einschließlich ArrayLists), Collections.binarySearch.
Wenn die Schlüssel eine akzeptable Verteilung haben, kann Interpolation Search sehr schnelle Weise sein, die Ausführungszeit denkend.
In Anbetracht Codierungszeit IndexOf()
ist der Weg zu gehen (oder eine eingebaute binäre Suche, wenn für Ihren Datentyp verfügbar (ich bin von C# und weiß nicht, Java)).
import java.util.ArrayList;
import java.util.Collections;
ArrayList myList = new ArrayList();
// ...fill with values
Collections.sort(myList);
int index = Collections.binarySearch(myList, "searchVal");
Edit: ungetesteten Code
Danke für den Code :) – Baversjo
- 1. Der beste Weg, um die Liste der Doubles zu gruppieren, um einen bestimmten Wert zu addieren
- 2. Was ist der beste Weg, um eine Liste zu kopieren?
- 3. Der beste Weg, um eine Liste in Java zu pflegen
- 4. Der beste Weg, um die Schnittmenge mehrerer Sets zu finden?
- 5. Der beste Weg, Duplikate aus zwei Liste
- 6. Der beste Weg, um eine kleine Schlüssel-Wert-Liste in Redis zu speichern
- 7. Der beste Weg, um den Wert einer "Liste" von Variablen in einer SQL-Tabelle zu aktualisieren
- 8. Was ist der beste Weg, Miniaturbild-Liste in UITableView anzuzeigen
- 9. Der beste Weg, um Erweiterungsmethoden zu implementieren
- 10. Was ist der beste Weg, um eine Liste von JSON-Objekten in JavaScript zu filtern?
- 11. Was ist der beste Weg, um eine Liste von "einzigartigen" Objekten in Java zu erstellen
- 12. Was ist der beste Weg, um die Wörterbücher Wert in der Liste zu filtern und entfernen Sie das Wörterbuch aus der Liste
- 13. Was ist der beste Weg, um große geordnete Listen oder Hashes zu manipulieren und zu speichern?
- 14. Der beste Weg, um eine Liste von Optionstypen auf nur Elemente zu reduzieren, die keine sind?
- 15. Was ist der beste Weg zu
- 16. Was ist der beste Weg, um eine Liste von Skalarwerten in Swift
- 17. Was ist der effizienteste Weg, Elemente in einer Liste zu finden, die nicht in einer anderen Liste existieren und umgekehrt?
- 18. Der beste Weg, um eine Liste der Unterschiede zwischen 2 der gleichen Objekte zu erhalten
- 19. Was ist der beste Weg, um eine teilweise geordnete Liste zu sortieren?
- 20. Was ist der beste Weg, um eine Liste mit Google-Guice zu injizieren?
- 21. Was ist der beste Weg, um eine Liste aus den Zeilen eines Rasters zu erstellen
- 22. Was ist der beste Weg, um Objekte aus einer Liste zu entfernen
- 23. Python dict Schlüssel-Liste als Wert Sortiert
- 24. ansible: wenn die Liste in der Liste
- 25. Was ist der einfachste Weg, um Liste mit str in Liste mit int zu konvertieren?
- 26. was ist der effizienteste Weg, um eine Liste
- 27. Der beste Weg, um eine Liste in ein Diktat zu verwandeln, wobei die Schlüssel ein Wert für jedes Objekt sind?
- 28. Was ist der beste Weg, um eine Liste zu iterieren, wenn Sie ihren Inhalt zu zerstören, wie Sie gehen
- 29. Was ist der beste Weg, um eine Enumeration zu erhöhen?
- 30. Der beste Weg, um die Zeichenfolge in PHP zu komprimieren
Für fünfzig Tasten stimme ich vollständig. Die Entwicklerzeit ist heutzutage wichtiger als die CPU-Zeit. Verwenden Sie IndexOf() und machen Sie sich auf den Weg. –
Außer dass Java/diese Funktionalität hat. –
Binäre Suche ist der Weg zu gehen. Die Liste kann derzeit nur 50 Elemente haben, aber wer weiß, was der Code in einem Jahr oder zwei zu handhaben haben wird. –