2016-06-27 13 views
7

Ich habe eine Liste von rund 100.000 Mitarbeitern in Java. Jetzt möchte ich ein bestimmtes Mitarbeiterobjekt schnell aus der Liste löschen. Welche Möglichkeiten gibt es, ohne die ganze Liste zu durchlaufen? (Wenn ich jedes Objekt iteriere, vergleiche die Details dann lösche: Dieses Szenario benötigt viel Zeit)Wie lösche ich ein bestimmtes List-Objekt in Java?

+0

UR_object_List.remove (Objekt) –

Antwort

7

Sie brauchen ein Mittel, um das Objekt schnell zu finden. Sie könnten

  • haben eine Arraylist sortieren und dann eine binäre Suche mit Collections.binarySearch O(log N) Hinweis ausführen: tatsächlich ein Element aus einer Arraylist zu entfernen, ist O(n) Während LinkedList als O(1) für entfernen, eine binäre Suche auf es wäre sinnlos, dh viel langsamer als O(N)
  • könnten Sie einen Hash-Satz von Mitarbeiter stattdessen haben und Entfernung wäre O(1) amortisiert. Sie können eine LinkedHashSet verwenden, wenn Sie eine Reihenfolge wie Reihenfolge der Einfügung beibehalten möchten.
  • Sie könnten das Objekt veränderbar machen und ein Feld wie enabled haben, das Sie auf false setzen, anstatt es tatsächlich zu entfernen. Man könnte es irgendwann später als Batch-Job entfernen (über Nacht oder am Wochenende)
+1

@TimBiegeleisen SO ist nicht Quora obwohl https://www.quora.com/Is-it-true-that-after-Brexit-Pluto-will-be-a-a-planet- in-UK wieder;) –

2

Jetzt habe ich ein bestimmtes Mitarbeiter-Objekt aus der Liste löschen mag ...

Sie können nur verwenden List.remove diese

zu tun ... schnell

In der Praxis sogar Obwohl das Entfernen des Elements möglicherweise eine Operation O(1) ist, ist das Iterieren über die gesamte Länge der Liste O(n) und ist, wie Sie vermuten, nicht sehr schnell.

Ich fühle, dass Ihr Problem besser durch die Macht einer hashmap bedient werden würde. Dies hat konstante Nach-und Nachlaufzeit. Die LinkedHashMap Klasse könnte Ihren Bedürfnissen entsprechen. Die Einfügereihenfolge wird auf die gleiche Weise beibehalten wie bei einer verknüpften Liste, aber es wird auch ständig eingefügt und gelöscht.

Verwandte Themen