Klassen ArrayList Index Integer int

GianaSisters

Bekanntes Mitglied
Hallo Zusammen,

ich weiß nicht mehr weiter und es kommt mir fast so vor als ob es an Java liegt. Aber vermutlich gibt es Leute die sich damit auskennen. 🙂 Mein Problem:
ich habe eine ArrayList mit Änderungsdatums von Dateien (Mehrzahl von Datum = datums??🙂 ).
Da ich später in meinem Programm alle Dateien ab einem bestimmten Datum raus haben will hab ich eine Liste gemacht die das rausfiltert. So weit so gut.... Nun etwas Code zum veranschaulichen:

Java:
     for (int xx = 0; xx<geloeschteDateien.size(); xx++){
            System.out.println(geloeschteDateien.get(xx));
            aktWertString = (geloeschteDateien.get(xx).toString());
            aktWert = Integer.parseInt(aktWertString);
            DateiDatumListe.remove(aktWert);
   }

Info: geloeschteDateien ist eine Arraylist aus Integern. Da steht dann z.b. eine 3 drinnen was bedeutet, dass die 3te Datei in der "DateiDatumListe" entfernt werden soll, da sie dem Datum entsprechend raussortiert werden soll.

Was passiert bei dem Code ? - Nix, aus deer Liste wird keine Datei gelöscht, obwohl beim System.out eine 3 angezeigt wird.
Änder ich per Hand DateiDatumListe.remove(aktWert) in DateiDatumListe.remove(3) funktioniert es. Das komische ist, dass ja aktWert den Wert 3 hat - eigentlich müßte es klappen oder liegt es am parsen ?
Freu mich über jede Hilfe,
Giana
 
Zuletzt bearbeitet von einem Moderator:
von welchem Typ ist aktWert, int oder Integer?

mit Pech rufst du remove(Integer), also remove(Object) auf,
dann wird nach einem Objekt in der Liste gesucht welches zu deinem Integer-Objekt equal ist,
das ist ganz was anderes als remove(int index)

> in DateiDatumListe.remove(3) funktioniert es

DateiDatumListe.remove(Integer.valueOf(3))
geht nicht



einen Integer ersten in einen String umzuwandeln und dann gleich zu parsen scheint generell fragwürdig, oder nicht?
 
Zuletzt bearbeitet von einem Moderator:
wenn das eine List<Integer> ist, kannste ja mal:

Java:
//....
DateiDatumListe.remove(geloeschteDateien.get(xx).intValue());

probieren. Wenn das funktionieren sollte, wäre es schon ein interessantes Verhalten von Autoboxing...
 
Benutze für Deine Listen Generics, dann kann man sich das Parsen und Casten sparen:
Java:
List<Integer> list = new ArrayList<Integer>();
..
andereListe.remove(list.get(xx));

Warum speicherst Du überhaupt die Indizes der zu löschenden Elemente in einer zweiten Liste? Kann man die Einträge älteren Datums nicht direkt aus der ursprünglichen Liste löschen.

Ausserdem wird Deine Art zu löschen - falls es mal funktioniert - mit hoher Wahrscheinlichkeit ein falsches Ergebnis liefern:
In der Liste sind die Indizes 3, 5, 8, 2 als zu löschen gespeichert.
Mit Deiner Vorgehensweise würde in der Schleife zunächst Index 3 gelöscht werden. Danach wäre aber Index 5 der "Hauptliste" auf Position 4 und es würde im nächsten Schleifendurchlauf der ursprüngliche Index 6 gelöscht werden.

Ich würde hier weniger einen Bug als einen Fehler im Code/Konzept vermuten ;-) Das ist aber schwierig ohne Beispielcode und konkretere Infos festzustellen.
 
Hallo Michael,

danke für die Antwort. Mir war schon bewußt, dass der Konzept doch sehr blöd ist und beim Remove es dann immer mit dem Weiterzählen zu Problemen kommt. Aber ohne Beispiel konnte ich das Problem auch nciht anbringen. Hab mir nun auch eine andere Vorgehensweise überlegt - danke aber für den Hinweis.
 

Neue Themen


Zurück
Oben