Ich brauche eine Java-Datenstruktur, die ich effizient hinzufügen, löschen und auf ein zufälliges Objekt zugreifen kann.Java-Datenstruktur, die effizient hinzufügen, löschen und zufällig
Dies ist, was nicht funktioniert:
Arraylist effiziente add (konstante Zeit) und Random Access (nur „get“ mit einer Zufallszahl), aber Löschungen lineare Zeit in Anspruch nehmen können, weil es möglicherweise muss Suche die ganze Liste danach.
TreeSet oder HashSet hat effiziente hinzufügen und löschen, aber ich kann nicht herausfinden, wie man ein zufälliges Objekt erhalten.
Irgendwelche Ideen?
In der Theorie würde ein B-Baum funktionieren, wenn ich den Baum selbst mit zufälligen Lefts oder Rechten durchqueren könnte, aber ich glaube nicht, dass eine Standard-Java-Klasse mir diese Fähigkeit gibt.
Ich bin bereit, eine Drittanbieter-Bibliothek zu verwenden, wenn nichts in den Standard-Java-Klassen funktionieren wird.
Ich brauche weder Duplikate oder Nullen, noch muss es threadsicher sein.
Danke.
'ArrayList.remove (int index)' läuft in der amortisierten konstanten Zeit. Soweit ich das beurteilen kann, bedeutet dies, dass einzelne Anrufe lineare Zeit sind, aber die durchschnittliche Zeit über eine Reihe von Anrufen nähert sich konstanter Zeit. – Aarowaim
Danke für das Aarowaim, aber ich würde nicht den Index des Objekts zu entfernen wissen. Ich nehme an, ich könnte diese Informationen separat in einer HashMap oder ähnlichem speichern, aber sobald ich ein Objekt aus der ArrayList entfernte, würden die anderen Objekte in der Liste die Indizes ändern, was bedeuten würde, dass einige der Werte in der HashMap falsch wären. und es würde mich linear brauchen, sie zu reparieren. – Magmatic
@Magmatic Müssen Sie doppelte Elemente zulassen? – Boann