Leeren Sie ein Array in Java / Verarbeitung

Lesezeit: 6 Minuten

Benutzeravatar von ina
in einem

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)?

  • 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(); oder myArray = 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


Benutzeravatar von Mark Peters
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 anrufen fill(boolean[], boolean)nicht fill(Object[], Object)und so würde es nicht akzeptieren null für den zweiten Parameter (wie null kann nicht zugeordnet werden boolean)

    – Markus Peters

    1. Oktober 2015 um 3:54 Uhr


Benutzeravatar von jjnguy
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 machen null.

    – 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);
  }
}

Benutzeravatar von Suraj Mahli
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];

Benutzeravatar von R.Moeller
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);
}

Benutzeravatar von om-nom-nom
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 a Collection 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

1436080cookie-checkLeeren Sie ein Array in Java / Verarbeitung

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy