Was ist der beste Weg, um Objekte aus einer Liste zu entfernen?

8
___ answer3767175 ___

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%     
___ answer3767198 ___

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.

    
___ answer3767108 ___

Sie könnten tun:

%Vor%     
___ answer3767241 ___

Hier ist eine weitere Guava-Version mit Collections2.filter :

%Vor%     
___ answer3767514 ___

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%     
___ answer21429243 ___

Wenn Sie ein Objekt wie das aktuelle Objekt oder das ausgewählte Objekt entfernen möchten, können Sie wie folgt vorgehen.

%Vor%     
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer3767143 ___

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.

    
___ answer3767159 ___

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%     
___ qstnhdr ___ Was ist der beste Weg, um Objekte aus einer Liste zu entfernen? ___
user339108 22.09.2010, 07:19
quelle

8 Antworten

8

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.

    
Jeff Mercado 22.09.2010, 07:28
quelle
13

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%     
maxkar 22.09.2010 07:33
quelle
4

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%     
nanda 22.09.2010 07:30
quelle
3

Wie Gosling es beabsichtigte, benutzt er Iterator.remove :

%Vor%

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.

    
abyx 22.09.2010 07:38
quelle
1

Sie könnten tun:

%Vor%     
Bart Kiers 22.09.2010 07:22
quelle
0

Hier ist eine weitere Guava-Version mit Collections2.filter :

%Vor%     
Sean Patrick Floyd 22.09.2010 07:43
quelle
0

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%     
x4u 22.09.2010 08:28
quelle
0

Wenn Sie ein Objekt wie das aktuelle Objekt oder das ausgewählte Objekt entfernen möchten, können Sie wie folgt vorgehen.

%Vor%     
Ganesa Vijayakumar 29.01.2014 11:08
quelle

Tags und Links