Ich denke, es ist eine ziemlich einfache Frage, aber ich kann nicht herausfinden, wie ich das richtig machen soll.
Ich habe eine leere Arrayliste:
ArrayList<object> list = new ArrayList<object>();
Ich habe einige Objekte, die ich hinzufügen möchte, und jedes Objekt muss sich an einer bestimmten Position befinden. Es ist jedoch erforderlich, dass sie in jeder möglichen Reihenfolge hinzugefügt werden können. Wenn ich das versuche, funktioniert es nicht und ich bekomme eine IndexOutOfBoundsException
:
list.add(1, object1)
list.add(3, object3)
list.add(2, object2)
Was ich versucht habe, ist das Füllen ArrayList
mit null
und dann das oben genannte zu tun. Es funktioniert, aber ich denke, es ist eine schreckliche Lösung. Gibt es einen anderen Weg, dies zu tun?
Antworten:
Sie können es so machen:
Nachdem Sie Objekt2 zu Position 2 hinzugefügt haben, wird Objekt3 zu Position 3 verschoben.
Wenn Sie möchten, dass Objekt3 die ganze Zeit an Position3 ist, empfehlen wir Ihnen, eine HashMap mit Position als Schlüssel und Objekt als Wert zu verwenden.
quelle
Sie können ein Array von Objekten verwenden und es in ArrayList- konvertieren.
ArrayList wird [1, null, 2, 3, null, null, null, 7, null, null]
quelle
Wenn dies der Fall ist, sollten Sie ein reguläres Array verwenden, die Kapazität initialisieren und Objekte an den gewünschten Index setzen.
quelle
Sie können ArrayList auch überschreiben, um Nullen zwischen Ihrer Größe und dem Element einzufügen, das Sie hinzufügen möchten.
Dann können Sie an jeder Stelle in der ArrayList hinzufügen. Zum Beispiel diese Hauptmethode:
ergibt dieses Ergebnis von der Konsole:
0: Null
1 Eins
2: zwei
3: null
4: null
5: fünf
quelle
Ich mache Sie auf die
ArrayList.add
Dokumentation aufmerksam , die besagt, dass sie wirftIndexOutOfBoundsException
- wenn der Index außerhalb des Bereichs liegt (index < 0 || index > size()
)Überprüfen
size()
Sie die Liste, bevor Sie anrufenlist.add(1, object1)
quelle
list.add("element");
Sie müssen die leeren Indizes mit Nullen füllen.
quelle
Beim Versuch, ein Element an der angegebenen Position hinzuzufügen, haben Sie IndexOutOfBound erhalten, sodass die Liste einige Elemente an ihrer Position enthalten sollte.
Bitte versuchen Sie Folgendes
quelle
Wie wäre es mit dieser kleinen
while
Schleife als Lösung?quelle
Dies ist eine mögliche Lösung:
quelle
Ich denke, die Lösung von medopal ist genau das, wonach Sie suchen.
Eine weitere alternative Lösung besteht darin, eine HashMap zu verwenden und den Schlüssel (Integer) zum Speichern von Positionen zu verwenden.
Auf diese Weise müssen Sie es zunächst nicht mit Nullen usw. füllen. Kleben Sie einfach die Position und das Objekt in die Karte, während Sie fortfahren. Sie können am Ende ein paar Zeilen schreiben, um sie in eine Liste zu konvertieren, wenn Sie sie auf diese Weise benötigen.
quelle
Angenommen, Sie möchten ein Element an einer Position hinzufügen, dann muss die Listengröße größer als die Position sein.
add(2, item)
: Diese Syntax bedeutet, dass Sie das alte Element an Position 2 zum nächsten Index verschieben und das Element an Position 2 hinzufügen.Wenn sich kein Element auf der 2. Position befindet, funktioniert dies nicht. Es wird eine Ausnahme ausgelöst.
Das heißt, wenn Sie etwas hinzufügen möchten
position 2,
Ihre Listengröße muss mindestens
(2 + 1) =3,
so sein, dass die Elemente unter verfügbar sind0,1,2 Position.
Auf diese Weise wird sichergestellt, dass auf Position 2 sicher zugegriffen wird und es keine Ausnahme gibt.
quelle
Wenn Sie die Android- Variante von Java verwenden, kann ich die Verwendung eines SparseArray vorschlagen . Es ist eine speichereffizientere Zuordnung von Ganzzahlen zu Objekten und einfacher zu durchlaufen als eine Zuordnung
quelle
Etwas spät, kann aber hoffentlich immer noch für jemanden nützlich sein.
2 Schritte zum Hinzufügen von Elementen zu einer bestimmten Position in einem
ArrayList
add
Nullelemente für einen bestimmten Index in einemArrayList
Dann
set
die Positionen nach Bedarf.Auf diese Weise haben Sie keine redundanten Elemente in der
ArrayList
dh, wenn Sie Elemente wie z.Dies würde vorhandene Elemente in der Position nicht nur überschreiben und vorhandene Elemente um eins nach rechts verschieben. Sie haben also eine ArrayList mit doppelt so vielen Angaben.
quelle
Sie sollten festlegen, anstatt hinzuzufügen, um den vorhandenen Wert am Index zu ersetzen.
Die Liste enthält [Objekt1, Objekt2]
quelle