Vider un tableau dans Java / processing

mis à part le fait de faire une boucle à travers chaque élément d'un tableau et de définir chacun à null, y a-t-il une fonction native dans Java / processing pour simplement vider un tableau (ou le détruire, pour pouvoir le re-déclarer comme un nouveau tableau)?

35
demandé sur om-nom-nom 2010-11-17 23:04:42

7 réponses

Il y a

Arrays.fill(myArray, null);

non pas qu'il fasse quoi que ce soit de différent de ce que vous feriez sur votre propre (il boucle juste à travers chaque élément et le met à null). Il n'est pas natif en ce sens que C'est du pur code Java qui exécute ceci, mais il une fonction de bibliothèque si c'est peut-être ce que vous vouliez dire.

bien sûr, Cela ne vous autorise pas à taille array (à zéro), si c'est ce que vous entendez par "vide." Tableau des tailles sont fixes, donc si vous voulez la "nouvelle" tableau pour avoir des dimensions différentes, vous êtes mieux de simplement réassigner la référence à un nouveau tableau comme les autres réponses le démontrent. Mieux encore, utilisez un List taper comme un ArrayList ce qui peut avoir une taille variable.

59
répondu Mark Peters 2010-11-17 20:13:44

Vous pouvez simplement attribuer null à la référence. (Cela fonctionne pour n'importe quel type de tableau, pas juste ints)

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

'effacer' la matrice. Vous pouvez aussi assigner un nouveau tableau à cette référence si vous aimez:

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

si vous craignez des fuites de mémoire, ne le soyez pas. Le collecteur d'ordures nettoiera toutes les références laissées par le tableau.

Autre exemple:

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

cela créera un nouveau float[] initialisé à la valeur par défaut du flotteur.

23
répondu jjnguy 2010-11-17 20:14:17
array = new String[array.length];
7
répondu Adam 2010-11-17 20:08:09

nettoyage plus rapide que les tableaux.remplir est avec ceci (à partir de Fast Serialization Lib). Je viens de l'utiliser arrayCopy (native) pour effacer le tableau:

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);
}
2
répondu R.Moeller 2013-10-07 12:08:09

je veux juste ajouter quelque chose au commentaire de Mark. Si vous voulez réutiliser le tableau sans allocation supplémentaire, utilisez-le à nouveau et outrepassez les valeurs existantes avec de nouvelles. Cela fonctionnera si vous remplissez le tableau de manière séquentielle. Dans ce cas, il suffit de se souvenir du dernier élément initialisé et d'utiliser le tableau jusqu'à cet index. Peu importe qu'il y ait des ordures au bout du tableau.

1
répondu AlexR 2013-03-05 10:35:17

prendre le tableau double comme exemple, si l'entrée initiale values array pas vide, l'extrait de code suivant est supérieure directe classique for-loop dans le temps de la complexité:

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);
  }
}
1
répondu Shiqing Fan 2016-10-31 06:29:01

j'ai été capable de le faire avec les 2 lignes, j'ai eu un tableau appelé selected_items utilisé pour obtenir tous les éléments sélectionnés sur un dataTable

selected_items = null; selected_items = [];

0
répondu Cesar Duran 2018-02-04 04:35:48