Wenn Sie ArrayList verwenden, ist die Variante von Jeff M der beste Weg. Sie können auch Ihre Variante verwenden, aber Sie sollten Set (HashSet oder IdentityHashSet) anstelle von ArrayList für removeUser verwenden. Für große Datenmengen wird es eine bessere Leistung haben.
Aber für LinkedList wird der beste Weg sein, die Iterator.remove-Methode zu verwenden:
%Vor%Wie Gosling es beabsichtigte, benutzt er %code% :
%Vor%Wenn Sie %code% verwenden, ist dies unter Performance-Gesichtspunkten vielleicht nicht das Beste. Aber vielleicht möchten Sie auch in %code% wechseln.
Auf diese Weise können Sie Elemente aus einer Sammlung entfernen, während Sie darüber iterieren.
Sie könnten tun:
%Vor%Hier ist eine weitere Guava-Version mit Collections2.filter :
%Vor%Hier ist ein weiterer Ansatz, der mit Array-basierten Listen ziemlich effizient ist. Dies liegt daran, dass nicht das gesamte Endstück mit jeder Entfernung kopiert werden muss. Es verwendet 2 Schritte: Zuerst werden alle Elemente, die beibehalten werden sollen, an ihre endgültige Position am Anfang der Liste kopiert, und dann werden alle verbleibenden Elemente am Ende der Liste entfernt.
%Vor%Wenn Sie ein Objekt wie das aktuelle Objekt oder das ausgewählte Objekt entfernen möchten, können Sie wie folgt vorgehen.
%Vor%Das ist ein vollkommen guter Weg, es IMHO zu machen.
Andere Möglichkeiten, wie ich es tun könnte, verwenden Sie Indizierung und entfernen, wie Sie in umgekehrter Schleife durchlaufen.
%Vor%Oder erstellen Sie eine neue Liste der zu behaltenden Elemente und ersetzen Sie sie durch die alte Liste.
%Vor%Ich kann im Moment nicht an andere denken.
Wie wäre es mit einigen Guava Magie?
%Vor%Wenn Sie das Prädikat an mehreren Stellen verwenden, können Sie sogar eine benannte Klasse dafür erstellen und Ihren Code noch besser machen:
%Vor%Das ist ein vollkommen guter Weg, es IMHO zu machen.
Andere Möglichkeiten, wie ich es tun könnte, verwenden Sie Indizierung und entfernen, wie Sie in umgekehrter Schleife durchlaufen.
%Vor%Oder erstellen Sie eine neue Liste der zu behaltenden Elemente und ersetzen Sie sie durch die alte Liste.
%Vor%Ich kann im Moment nicht an andere denken.
Wenn Sie ArrayList verwenden, ist die Variante von Jeff M der beste Weg. Sie können auch Ihre Variante verwenden, aber Sie sollten Set (HashSet oder IdentityHashSet) anstelle von ArrayList für removeUser verwenden. Für große Datenmengen wird es eine bessere Leistung haben.
Aber für LinkedList wird der beste Weg sein, die Iterator.remove-Methode zu verwenden:
%Vor% Wie Gosling es beabsichtigte, benutzt er Iterator.remove
:
Wenn Sie ArrayList
verwenden, ist dies unter Performance-Gesichtspunkten vielleicht nicht das Beste. Aber vielleicht möchten Sie auch in LinkedList
wechseln.
Auf diese Weise können Sie Elemente aus einer Sammlung entfernen, während Sie darüber iterieren.
Hier ist eine weitere Guava-Version mit Collections2.filter :
%Vor%Hier ist ein weiterer Ansatz, der mit Array-basierten Listen ziemlich effizient ist. Dies liegt daran, dass nicht das gesamte Endstück mit jeder Entfernung kopiert werden muss. Es verwendet 2 Schritte: Zuerst werden alle Elemente, die beibehalten werden sollen, an ihre endgültige Position am Anfang der Liste kopiert, und dann werden alle verbleibenden Elemente am Ende der Liste entfernt.
%Vor%Wenn Sie ein Objekt wie das aktuelle Objekt oder das ausgewählte Objekt entfernen möchten, können Sie wie folgt vorgehen.
%Vor%Tags und Links java