Performance ArrayList#remove

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Guten Morgen,

ich habe leider momentan keine Möglichkeit das selbst zu testen, deshalb die Frage an euch:

Ich habe eine ArrayList, aus der bestimmte Werte entfernt werden sollen. Diese Werte habe ich in einem Array stehen. Ich gehe also das komplette Array durch und entferne jedes Element aus der ArrayList, welches auch im Array steht. Soweit kein Problem, aber: Ich weiß, dass ca. die Hälfte der Werte in dem Array immer gleich ist, und dass diese Werte garantiert nicht in der ArrayList vorkommen (das Array hat eine Länge von ca. 5-15).

Was ist jetzt performanter? Einfach jedes Element (egal ob ich weiß, dass es u. U. gar nicht vorkommen kann) entfernen, oder vorher überprüfen, ob es sich um ein Element handelt, bei dem ich ein vorkommen in der ArrayList sicher ausschließen kann?

Um das festzustellen benötige ich keine equals Methode, sondern kann mit == überprüfen.

Bsp.:

Code:
private void remove(ArrayList<Integer> list, int[] values) {
  for (int i = 0; i < values.length; i++) {
    if (values[i] != 0) { // Performanter???
      list.remove(values[i]);
    }
  }
}

Danke!
 

Grasstampfer

Gesperrter Benutzer
die idee so wie du es schreibst geht so und so nicht...
die methode remove benoetigt den Index welches element geloescht wird.

so wie du es beschreibst stehen im array die werte die geloescht werden sollen, also rufst du remove mit einem wert nicht mit einem index auf.

du muesstest wissen an welcher stelle der Wert X, der im array steht und somit geloescht werden soll, in der liste vorkommt.

es gibt die methode remove(Object o) aus der liste, aber da du ein int[] benutzt nimmt er die remove(int index) methode...

ansonsten glaub ich nicht dass du viel zeit damit gewinnst... das remove laeuft einmal ueber die liste drueber und prueft mit equals auf gleichheit. selbst bei einer liste von 10000 elementen ist das ne sache von millisekunden.

ich persoenliche finde es aber besser dass, wenn du schon werte ausschliessen kannst, die nicht in der liste vorkommen, dass dann auch nicht geloescht werden muss, ergo wuerde ich die abfrage vorher machen.
 
S

SlaterB

Gast
1.
selber testen?

2.
in dem Bereich doch hoffentlich ohne jede Performance-Relevanz
oder löschst du milliardenfach Elemente aus Listen? ;)

3.
LinkedList statt ArrayList könnte allein schon wegen des Löschens performanter sein?

4.
wenn sowas schon wichtig ist, dann schreib doch lieber ne eigene Klasse, die gleich die Werte irgendwie indexiert,
oder zumindest mitzählt, wieviel von welcher Sorte vorhanden ist ;)
 

The_S

Top Contributor
@Grasstampfer

Die Idee geht, ich hab nur beim Beispielcode vergessen einen Integer zu erstellen ;) .

Dieser Vorgang muss seeeeeeeeeeeeeehr oft auf einem seeeeeeeeeeehr langsamen PC wiederholt werden. Deshalb die Performance-Frage.

@Slater

1. geht nicht, s. o. ;)
2. siehe Antwort an Grasstampfer
3. hab mich noch nicht mit den Perfromance Unterschieden zwiscnen LL und AL auseinander gesetzt. Werde ich mal tun ...
4. hab ich auch schon überlegt, geht mir aber primär um die oben genannte Fragen und nicht um Alternativen

Danke
 

Marco13

Top Contributor
Beim "remove" mit einem Element, das nicht in der Liste enthalten ist, tritt der worst case ein: Die Liste muss komplett durchsucht werden, nur um festzustellen, dass das Element nicht enthalten ist. Wenn man das vorher schnell testen kann, sollte man das vermutlich tun ...
 

Leroy42

Top Contributor
Ich würde vom worst-case beim Löschen aus einer Array-List
eher dann sprechen, wenn das 1. Element gelöscht werden soll! :shock:

Auch mein Vorschlag: Umstellung auf eine LinkedList
 

The_S

Top Contributor
Also ich werd wohl nicht drum rum kommen das zu testen. Mach ich mal sobald ich die Möglichkeit habe. Danke für eure Tipps!
 

Marco13

Top Contributor
OK, das was Leroy42 erwähnt hat stimmt zwar, ist aber nur ein Implementierungsdetail der List. Wenn dort irgendeine List verwendet wird, dann ist das Löschen eines nicht enthaltenen Elements der worst case. Wenn die konkrete Implementierung eine ArrayList ist, ist ein Löschen des ersten Elements zwar "noch schlechter", aber das könnte man ja durch Verwendung einer LinkedList umgehen :wink:
 
S

SlaterB

Gast
ich empfinde das Durchlaufen der ganzen Liste eher als Normalfall,

hier bisher kaum direkt thematisiert: remove() löscht nur das erste Vorkommen,
wenn es das erste Element der Liste ist, dann wird 99% der Liste gar nicht durchlaufen,

wenn man weiß, dass ein Element nur maximal einmal vorhanden sein kann, dann mag das reichen,
ansonsten muss man doch eh noch ein remove hinterherschicken
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Performance: ArrayList vs. Array vs. "Eigene Liste&quot Allgemeine Java-Themen 8
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
H Watson-Crick-Complement Performance Allgemeine Java-Themen 18
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
B Performance Messungen Allgemeine Java-Themen 4
J Threads verbessern die Performance NICHT ? Allgemeine Java-Themen 8
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
I Performance - JDBC UPC PoolDataSoure Allgemeine Java-Themen 0
E Lambda filter performance Allgemeine Java-Themen 2
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
A Jasper Report Performance bei PDF erzeugen Allgemeine Java-Themen 0
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
R DBUnit Performance Probleme Allgemeine Java-Themen 0
P Performance: super explizit erwähnen oder weglassen? Allgemeine Java-Themen 5
S starke performance probleme des forums Allgemeine Java-Themen 10
C Performance Tips Allgemeine Java-Themen 13
A Performance/Speicherplatz-Nutzung bei Tests Allgemeine Java-Themen 6
R Java Performance testen Allgemeine Java-Themen 18
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
V Performance steigern Allgemeine Java-Themen 7
D Reflection-Performance Allgemeine Java-Themen 7
M Einfluss von Caching auf die Performance (große Arrays) Allgemeine Java-Themen 24
R Collections Performance einer HashMap Allgemeine Java-Themen 26
i<3java [Groovy/Grails](oder auch java) Mögliche Performance Probleme bei Mailversendung Allgemeine Java-Themen 2
D Performance Objektallokation Allgemeine Java-Themen 28
J Java Performance nicht nachvollziehbar Allgemeine Java-Themen 3
I Library für High Performance Mime Type Erkennung Allgemeine Java-Themen 8
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
M Runtime.exec() - Performance / Frage zu Threads Allgemeine Java-Themen 5
M Performance Allgemeine Java-Themen 6
M Performance Allgemeine Java-Themen 5
E Performance website download Allgemeine Java-Themen 13
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
hdi Was frisst in meinem Programm den Speicher / verschlechtert die Performance Allgemeine Java-Themen 11
J Performance von Java GUI-Anwendungen Allgemeine Java-Themen 2
U Java Performance im Vergleich zu C++ in speziellem Anwendungsfall Allgemeine Java-Themen 6
S Performance und Function Call Depth Allgemeine Java-Themen 6
H Performance Vorteil durch Wechsel der JVM? Allgemeine Java-Themen 6
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
ARadauer Performance Pptimierung -Lesen/Schreiben Allgemeine Java-Themen 10
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
M Listener und Performance Allgemeine Java-Themen 9
P Performance: Ziehen ohne Zurücklegen (große Datenmenge) Allgemeine Java-Themen 10
M nichtreferenzierte Objekte auf NULL setzen -> Performance Allgemeine Java-Themen 4
S Ursache für schlechte Performance Allgemeine Java-Themen 2
L Java Performance Check Tool Allgemeine Java-Themen 3
S Performance von Comparator Allgemeine Java-Themen 3
egrath Performance Problem mit File-I/O Allgemeine Java-Themen 6
S Performance Problem Allgemeine Java-Themen 11
X Java Performance auf Sun Systemen bzw. generell Allgemeine Java-Themen 4
T Performance String-Operationen und StringBuffer (1.4und 1.5) Allgemeine Java-Themen 18
P miese performance bei nem BufferedImage + repaint :( Allgemeine Java-Themen 6
T Performance-Grundlagen Allgemeine Java-Themen 4
G Performance Problem bei der Übertragung Server zum Client Allgemeine Java-Themen 3
V Performance Leck finden Allgemeine Java-Themen 3
T Tile Game Performance Allgemeine Java-Themen 32
M Performance enorm langsam Allgemeine Java-Themen 26
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
M Performance: Java zu C/C++ bei Datenbankanwendung Allgemeine Java-Themen 3
Y unnecessary cast & Performance Allgemeine Java-Themen 29
conan2 Performance von paint() Allgemeine Java-Themen 2
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
F Bilder als "Thumbnails" laden - Performance Allgemeine Java-Themen 6
S Java3D Performance optimieren Allgemeine Java-Themen 5
F Wenn ihr Performance wollt nehmt C++ Allgemeine Java-Themen 39
N Performance-Test (Geschwindigkeit von Methoden vergleichen)? Allgemeine Java-Themen 4
S Performance Test mit JMeter Allgemeine Java-Themen 2
T Performance Allgemeine Java-Themen 8
J Anfängerliste für gute Performance? Allgemeine Java-Themen 3
Luma Performance-Problem mit RandomAcces File Allgemeine Java-Themen 4
I Performance bei "String <-> Byte"-Umwandlung Allgemeine Java-Themen 4
I Performance-Probleme bei Schleife Allgemeine Java-Themen 3
C Performance von FOR Schleifen Allgemeine Java-Themen 25
C Performance Vergleich, Java vs. Tcl/Tk Allgemeine Java-Themen 3
M ArrayList oder LinkedList Allgemeine Java-Themen 10
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
R ArrayList Allgemeine Java-Themen 4
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
L ArrayList sortieren Allgemeine Java-Themen 2
C ArrayList Problem Allgemeine Java-Themen 3
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
S Best Practices CopyConstrutor mit ArrayList Allgemeine Java-Themen 1
S ArrayList Design Allgemeine Java-Themen 4
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
X Output von ArrayList Allgemeine Java-Themen 3
H Stream in ArrayList umwandeln Allgemeine Java-Themen 2
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
H Arraylist mit anderer ArrayList überschreiben Allgemeine Java-Themen 17
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben