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)?
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.
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.
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);
}
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.
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);
}
}
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 = [];