Abgesehen davon, dass jedes Element in einem Array durchlaufen und auf null gesetzt wird, gibt es in Java / Processing eine native Funktion, um ein Array einfach zu leeren (oder zu zerstören, um es als neues Array neu deklarieren zu können)?
Leeren Sie ein Array in Java / Verarbeitung
in einem
Markus Peters
Es gibt
Arrays.fill(myArray, null);
Nicht, dass es etwas anderes macht, als Sie es selbst tun würden (es durchläuft einfach jedes Element und setzt es auf null). Es ist nicht nativ, da es reiner Java-Code ist, der dies ausführt, aber es ist eine Bibliotheksfunktion, wenn Sie das vielleicht gemeint haben.
Das erlaubt dir natürlich nicht Größe ändern das Array (auf Null), wenn Sie das mit “leer” gemeint haben. Array-Größen sind fest. Wenn Sie also möchten, dass das “neue” Array andere Dimensionen hat, weisen Sie die Referenz am besten einfach einem neuen Array neu zu, wie die anderen Antworten zeigen. Besser noch, verwenden Sie a List
Typ wie ein ArrayList
die eine variable Größe haben können.
-
Es gibt keinen Grund, ein Array an zu durchlaufen
null
jeden Eintrag aus. Was gewinnen Sie, wenn Sie dies tun, anstatt dem Array einfach einen neuen Wert zuzuweisen? (Entschuldigung für den Kommentar zur alten Antwort.)– jjnguy
30. August 2012 um 13:07 Uhr
-
@jjnguy: Ich konnte eine Implementierung einer Array-Liste sehen, die dies für die klare Operation tut.
– Markus Peters
31. August 2012 um 18:35 Uhr
-
Anstatt nur zu tun
backingStore = new Type[size]
?– jjnguy
31. August 2012 um 20:13 Uhr
-
@jjnguy: Sicher. Das Nullstellen des Arrays ist viel effizienter als das Erstellen eines neuen (insbesondere wenn die JLS erfordert, dass das neue Array sowieso auf Null gesetzt wird). Tatsächlich ist dies genau das, was OpenJDK bietet
ArrayList.clear()
tut: Es setzt die Größe auf Null und iteriert dann über das Array, wobei jeder Index auf Null gesetzt wird.– Markus Peters
1. September 2012 um 5:05 Uhr
-
@IgorGanapolsky: Wenn Sie eine haben
boolean[]
du würdest anrufenfill(boolean[], boolean)
nichtfill(Object[], Object)
und so würde es nicht akzeptierennull
für den zweiten Parameter (wienull
kann nicht zugeordnet werdenboolean
)– Markus Peters
1. Oktober 2015 um 3:54 Uhr
jjnguy
Sie können einfach zuordnen null
zum Bezug. (Dies funktioniert für jede Art von Array, nicht nur ints
)
int[] arr = new int[]{1, 2, 3, 4};
arr = null;
Dies wird das Array “löschen”. Sie können dieser Referenz auch ein neues Array zuweisen, wenn Sie möchten:
int[] arr = new int[]{1, 2, 3, 4};
arr = new int[]{6, 7, 8, 9};
Wenn Sie sich Sorgen über Speicherlecks machen, seien Sie nicht besorgt. Der Garbage Collector bereinigt alle Verweise, die das Array hinterlassen hat.
Ein anderes Beispiel:
float[] arr = ;// some array that you want to clear
arr = new float[arr.length];
Dadurch entsteht ein neues float[]
auf den Standardwert für Float initialisiert.
-
Ich erhalte den nullpointerexception-Fehler, wenn ich einfach ein Array leere, indem ich es null zuweise … die Idee ist, dass dasselbe Array in jeder Iteration wiederverwendet wird, aber die Zahlen nach jeder Iteration keine Rolle spielen, sodass es geleert werden kann.
– in einem
17. November 2010 um 20:10 Uhr
-
nicht so sicher, da es jeden Teil des Codes, der dieses Array verwendet, beschädigt und a auslöst
NullPointerException
– Jack
17. November 2010 um 20:12 Uhr
-
@ina, wenn du zuweist
null
zum Array, können Sie es nicht mehr verwenden. Sie müssen ein Array in dieser Referenz neu deklarieren. Siehe mein zweites Beispiel.– jjnguy
17. November 2010 um 20:12 Uhr
-
@ina, oder siehe mein 3. Beispiel.
– jjnguy
17. November 2010 um 20:14 Uhr
-
Ich habe benutzt
arr = new int[]{};
um mein Array zu löschen, anstatt es zu machennull
.– Senura Dissanayake
14. April 2018 um 5:37 Uhr
array = new String[array.length];
-
Das wird also mit allen Standardwerten richtig initiiert und in diesem Fall sind sie null? Aber erhöht dies nicht die Wahrscheinlichkeit von nullPointerException ?
– Herr Jain
17. Juni 2020 um 0:40 Uhr
Nehmen Sie als Beispiel Double-Array, wenn die anfängliche Eingabe values
Array ist nicht leerist das folgende Code-Snippet dem traditionellen direkten überlegen for-loop
in zeitlicher Komplexität:
public static void resetValues(double[] values) {
int len = values.length;
if (len > 0) {
values[0] = 0.0;
}
for (int i = 1; i < len; i += i) {
System.arraycopy(values, 0, values, i, ((len - i) < i) ? (len - i) : i);
}
}
Suraj Mahli
Wenn Array xco
nicht endgültig ist, würde eine einfache Neuzuweisung funktionieren:
dh
xco = new Float[xco .length];
Dies setzt voraus, dass Sie das Array benötigen xco
gleich groß zu bleiben. Wenn dies nicht erforderlich ist, erstellen Sie ein leeres Array:
xco= new Float[0];
R.Möller
Schnelleres Löschen als Arrays.fill ist damit (From Fast Serialization Lib). Ich benutze einfach arrayCopy (ist nativ), um das Array zu löschen:
static Object[] EmptyObjArray = new Object[10000];
public static void clear(Object[] arr) {
final int arrlen = arr.length;
clear(arr, arrlen);
}
public static void clear(Object[] arr, int arrlen) {
int count = 0;
final int length = EmptyObjArray.length;
while( arrlen - count > length) {
System.arraycopy(EmptyObjArray,0,arr,count, length);
count += length;
}
System.arraycopy(EmptyObjArray,0,arr,count, arrlen -count);
}
OM Nom Nom
Ich möchte nur etwas zu Marks Kommentar hinzufügen. Wenn Sie das Array ohne zusätzliche Zuordnung wiederverwenden möchten, verwenden Sie es einfach erneut und überschreiben Sie vorhandene Werte mit neuen. Es funktioniert, wenn Sie das Array sequentiell füllen. Merken Sie sich in diesem Fall einfach das zuletzt initialisierte Element und verwenden Sie Array bis zu diesem Index. Es spielt keine Rolle, dass sich am Ende des Arrays etwas Müll befindet.
-
Das ist genau das, was
ArrayList
tut für Sie hinter den Kulissen. Es funktioniert, es selbst zu machen, ist aber umständlicher und es können leicht Fehler gemacht werden. IMO, besser zu verwenden aCollection
Klasse. Aber wenn Sie mit der direkten Verwendung eines Arrays nicht weiterkommen, ist dies eine gute Beobachtung.– Markus Peters
17. November 2010 um 21:04 Uhr
etwas wie das –
float[] xco=new float[1024];
– in einem
17. November 2010 um 20:11 Uhr
Java ist so konzipiert, dass Sie sich darüber keine Gedanken machen müssen. Sie sollten in der Lage sein, Ihren Code so anzuordnen, dass Sie nichts tun müssen. Die wenigen Beispiele, bei denen es einen Unterschied machen könnte, können leicht umgestaltet werden, sodass dies nicht erforderlich ist.
– Peter Lawrey
17. November 2010 um 20:22 Uhr
Die Frage hier ist mir unklar. Fragen Sie 1) wie setze ich alle Elemente in einem Array auf Null oder 2) wie entferne ich alle Elemente aus dem Array? Wenn die Elemente im Array nicht mehr benötigt werden und Sie ein leeres Array (dh ein Array mit null Elementen) möchten, das wieder verwendet werden kann, können Sie es verwenden
myArray.clear();
odermyArray = new ArrayList();
. Wenn Sie möchten, dass jedes Element im Array für einen bestimmten Bedarf in Ihrem Code null ist, dann ist dies kein leeres Array; es ist ein Array von Nullen. Ich habe diese Frage abgelehnt, werde sie aber erhöhen, wenn Sie auf meine Bedenken eingehen.– Jason
22. Mai 2015 um 15:48 Uhr