Ich habe eine ArrayList
Annahme list
, und es hat 8 Elemente AH und jetzt möchte ich 1,3,5 Position Element im int Array gespeichert aus dem list
Wie kann ich das tun.
Ich versuche das mit zu machen
ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
list.add("G");
list.add("H");
int i[] = {1,3,5};
for (int j = 0; j < i.length; j++) {
list.remove(i[j]);
}
Nachdem das erste gelöschte Element an der Position des Arrays geändert wurde, wird bei der nächsten Iteration das falsche Element gelöscht oder eine Ausnahme gemacht.
List
) unter Verwendung vonequals("B")
,equals("D")
undequals("F")
. Denk darüber nach.Antworten:
In diesem speziellen Fall sollten Sie die Elemente in absteigender Reihenfolge entfernen. Erster Index
5
, dann3
, dann1
. Dadurch werden die Elemente ohne unerwünschte Nebenwirkungen aus der Liste entfernt.quelle
String
s, nichtInteger
s (trotzdem stimme ich Ihrer Beobachtung zu).ArrayList<E>
- warum sollte jemand ein Objekt von einerArrayList
rein auf Position basierenden Position entfernen wollen, anstatt zu testen, was sich an dieser Position befindet? Das OP kann durchausString
als Objekttyp für das verwendet werden,ArrayList
aber Ihre Antwort ist eine wirklich schlechte Codierungspraxis für Generika, selbst wenn es die spezielle Situation des OP löst.ArrayList<String>
nicht danachArrayList<E>
.Sie können Elemente aus der
ArrayList
Verwendung entfernenListIterator
,quelle
quelle
Wie bereits erwähnt
Dies ist möglicherweise der einzig sichere Weg, um Listenelemente während der Schleife zu entfernen.
Versuchen Sie, sich diesen Thread anzusehen, um ein besseres Verständnis für das Entfernen von Elementen mithilfe des Iterators zu erhalten
quelle
Ich gehe davon aus, dass das Array i aufsteigend sortiert ist. Hier ist eine andere Lösung mit Iterator. Es ist allgemeiner:
quelle
Wie wäre es damit? Denken Sie einfach darüber nach.
Und die Ausgabe war-
quelle
Versuchen Sie es so,
quelle
quelle
Wenn Sie "=" verwenden, wird in der zweiten ein Replikat für die ursprüngliche Arrayliste erstellt. Die Referenz ist jedoch dieselbe. Wenn Sie also in einer Liste ändern, wird auch die andere geändert. Verwenden Sie dies anstelle von "="
quelle
remove (int index) Methode der Arrayliste entfernt das Element an der angegebenen Position (Index) in der Liste. Nach dem Entfernen von Arraylist-Elementen werden alle nachfolgenden Elemente nach links verschoben.
Bedeutet, wenn eine Arrayliste {20,15,30,40} enthält
Ich habe die Methode aufgerufen: arraylist.remove (1)
dann werden die Daten 15 gelöscht und 30 & 40 diese beiden Elemente werden um 1 verschoben.
Aus diesem Grund müssen Sie zuerst das Element mit dem höheren Index der Arrayliste löschen.
Also ... für Ihre gegebene Situation ... lautet der Code ...
quelle