Leeg een array in Java / verwerking

Bestaat er behalve het doorlopen van elk element in een array en het instellen van elk element op null, een native functie in Java / processing om een array eenvoudigweg te legen (of te vernietigen, zodat het opnieuw als een nieuwe array kan worden gedeclareerd)?


Antwoord 1, autoriteit 100%

Er is

Arrays.fill(myArray, null);

Niet dat het iets anders doet dan je in je eentje zou doen (het loopt gewoon door elk element en zet het op null). Het is niet native omdat het pure Java-code is die dit uitvoert, maar het iseen bibliotheekfunctie als je dat misschien bedoelde.

Hiermee kun je natuurlijk niet de grootte van de array verkleinen(naar nul), als dat is wat je bedoelde met
“leeg”. De arraygroottes zijn vast, dus als u wilt dat de “nieuwe” array verschillende afmetingen heeft, kunt u de verwijzing het beste gewoon opnieuw toewijzen aan een nieuwe array, zoals de andere antwoorden aantonen. Beter nog, gebruik een List-type zoals een ArrayListdie een variabele grootte kan hebben.


Antwoord 2, autoriteit 45%

Je kunt eenvoudig nulltoewijzen aan de referentie. (Dit werkt voor elk type array, niet alleen ints)

int[] arr = new int[]{1, 2, 3, 4};
arr = null;

Hiermee wordt de array ‘opgeruimd’. U kunt desgewenst ook een nieuwe array aan die referentie toewijzen:

int[] arr = new int[]{1, 2, 3, 4};
arr = new int[]{6, 7, 8, 9};

Als u zich zorgen maakt over geheugenlekken, wees dan niet bang. De vuilnisman zal alle referenties opruimen die door de array zijn achtergelaten.

Nog een voorbeeld:

float[] arr = ;// some array that you want to clear
arr = new float[arr.length];

Hiermee wordt een nieuwe float[]geïnitialiseerd naar de standaardwaarde voor float.


Antwoord 3, Autoriteit 12%

array = new String[array.length];

Antwoord 4, Autoriteit 5%

Neem de dubbele array als een voorbeeld, als de initiële ingang valuesarray niet leeg is , is de volgende codefragment superieur aan traditionele directe for-loopin de tijd complexiteit:

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

Antwoord 5, Autoriteit 5%

Als array xconiet definitief is, zou een eenvoudige herplaatsing werken:

d.w.z.

xco = new Float[xco .length];

Dit veronderstelt dat u de array xconodig hebt om dezelfde grootte te blijven. Als dat niet nodig is, maak dan een lege array:

xco= new Float[0];

Antwoord 6, Autoriteit 4%

Snellere clearing dan arrays.fill is hiermee (van snelle serialisering lib). Ik gebruik gewoon Arraycopy (is native) om de array te wissen:

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

Antwoord 7, autoriteit 3%

Ik wil alleen iets toevoegen aan Marks opmerking.
Als u de array opnieuw wilt gebruiken zonder extra toewijzing, gebruikt u deze gewoon opnieuw en vervangt u bestaande waarden door nieuwe. Het zal werken als u de array opeenvolgend vult. Onthoud in dit geval gewoon het laatst geïnitialiseerde element en gebruik array tot deze index. Het maakt niet uit dat er wat rommel aan het einde van de array zit.


Antwoord 8

Ik was in staat om dat te doen met de volgende 2 regels, ik had een array genaamd selected_items die werd gebruikt om alle geselecteerde items op een dataTable te krijgen

selected_items = null;
selected_items = [];

Other episodes