Ich versuche, Elemente zu einem Array hinzuzufügen, zu entfernen und zu referenzieren, das ich in meiner Java-Hauptdatei erstellt habe, aber ich habe Probleme, die richtige Syntax herauszufinden. In Actionscript haben sie push () und pop () zum Hinzufügen und Entfernen von Elementen in einem Array. Gibt es ein Äquivalent in Android?
77
Antworten:
In Java hat ein Array eine feste Größe (nach der Initialisierung), was bedeutet, dass Sie keine Elemente zu einem Array hinzufügen oder daraus entfernen können.
int[] i = new int[10];
Das obige Snippet bedeutet, dass das Array von Ganzzahlen eine Länge von 10 hat. Es ist nicht möglich, eine elfte Ganzzahl hinzuzufügen, ohne den Verweis einem neuen Array wie folgt neu zuzuweisen:
int[] i = new int[11];
In Java enthält das Paket java.util alle Arten von Datenstrukturen, die das Hinzufügen und Entfernen von Elementen aus Array-ähnlichen Sammlungen ermöglichen. Die klassische Datenstruktur Stack verfügt über Methoden für Push und Pop.
quelle
Verwenden Sie die Array-Liste http://developer.android.com/reference/java/util/ArrayList.html
quelle
Für diejenigen, die keine Zeit haben, den Code umzugestalten, um Arrays durch
Collection
s zu ersetzen (zum BeispielArrayList
), gibt es eine Alternative. Im Gegensatz zuCollection
s kann die Länge eines Arrays nicht geändert werden, das Array kann jedoch wie folgt ersetzt werden:Die Nachteile sind das
Object
wird nicht geändert, daher müssen Sie die Variablen entsprechend aktualisieren.Hier ist die
push
Methode fürString
:(Sie können mehrere
push
Methoden erstellen , eine fürString
, eine fürint
usw.)private static String[] push(String[] array, String push) { String[] longer = new String[array.length + 1]; for (int i = 0; i < array.length; i++) longer[i] = array[i]; longer[array.length] = push; return longer; }
Diese Alternative ist effizienter, kürzer und schwerer zu lesen:
private static String[] push(String[] array, String push) { String[] longer = new String[array.length + 1]; System.arraycopy(array, 0, longer, 0, array.length); longer[array.length] = push; return longer; }
quelle
Sie können LinkedList verwenden. Es hat Methoden zu spähen, abzufragen und anzubieten.
quelle
Sie können
Arrays.copyOf()
mit ein wenig Reflexion verwenden, um eine schöne Hilfsfunktion zu erstellen.public class ArrayHelper { public static <T> T[] push(T[] arr, T item) { T[] tmp = Arrays.copyOf(arr, arr.length + 1); tmp[tmp.length - 1] = item; return tmp; } public static <T> T[] pop(T[] arr) { T[] tmp = Arrays.copyOf(arr, arr.length - 1); return tmp; } }
Verwendung:
String[] items = new String[]{"a", "b", "c"}; items = ArrayHelper.push(items, "d"); items = ArrayHelper.push(items, "e"); items = ArrayHelper.pop(items);
Ergebnisse
quelle
Arrays.copyOf()
erstellt bei jedem Aufruf ein neues Array. Wenn Sie ein ziemlich langes Array in eine Schleife einfügen müssen, ist die Leistung viel schlechter alsfor (...) {String stringC = stringA + stringB}