Réinitialiser les valeur d'un tableau à 0

Fermé
k-led87 Messages postés 10 Date d'inscription dimanche 31 mars 2013 Statut Membre Dernière intervention 6 octobre 2013 - 31 mars 2013 à 22:22
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 1 avril 2013 à 15:02
Bonjour a tous

je veux réinitialiser les valeurs d'un tableau à 0 mais comme la taille de mon tableau est trop grande je cherche une solution pour le réinitialiser son utiliser une boucle ''sous Eclipse''


Merci
A voir également:

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 1/04/2013 à 09:59
"je cherche une solution pour minimiser la taille de la mémoire utiliser (RAM)"
"la structure ArrayList est la solution du probléme"

Attention !

Une ArrayList est bien plus grosse en mémoire qu'un tableau. En particulier parce qu'on devra remplacer tous les int (4 octets) par des Integer (16 octets), sans oublier le tableau de références qui est à lui seul aussi gros que le tableau d'int !

Comparaison approximative des tailles (en octets)
Tableau d'int : 4*length ; ArrayList d'Integer : 4*capacity+16*size

De plus, la méthode clear ne va pas réinitialisé la valeur des Integer à 0, mais les supprimer de la liste, tu devras donc construire à nouveau autant d'Integer que tu n'en as supprimé. Ce qui va là encore coûter cher en mémoire (16*size) puisque les Integer enlevés de la liste ne seront pas immédiatement supprimés de la mémoire (il faudra attendre que Java n'ai plus de mémoire pour qu'il appelle le garbage collector qui lui libérera la mémoire, mais cette opération est coûteuse en temps)

Si tu veux mettre toutes les valeurs du tableau à zéro tu peux utiliser la méthode Arrays.fill(int[],int). Remarque : sans surprise l'implémentation de cette méthode est une boucle for, parce que tu auras beau tourner le problème dans tous les sens, c'est la méthode la plus rapide et la plus économe en mémoire.

Arrays.fill(tab, 0);
2
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
31 mars 2013 à 23:19
tu créer un nouveau tableau de même dimension :

type[] t2 = new type[t1.length];
t1=t2;

Tu alloues alors de la mémoire pour le tableau t2, et tu dis que maintenant l'adresse mémoire de la variable t1 sera la même que t2. En fait le nouveau tableau sera partagé entre t1 et t2. Si tu modifies t1, tu modifies t2. Le problème est que le tableau t1 d'avant est toujours stocké quelque part dans la mémoire. Donc si tu dis que ton tableau est assez grand, le mieux reste de faire une boucle !
1
k-led87 Messages postés 10 Date d'inscription dimanche 31 mars 2013 Statut Membre Dernière intervention 6 octobre 2013
31 mars 2013 à 23:58
merci" totodunet" pour votre aide
mais avec votre solution le problème n'est vraiment régler car moi je cherche une solution pour minimiser la taille de la mémoire utiliser (RAM) et l'estimation de temps d'exécution par ce traitement , parce que je suis obligé de le répéter plusieurs fois (plusieurs appelle de la méthode)

Merci
0
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
Modifié par totodunet le 1/04/2013 à 00:18
si ton tableau est un ArrayList, tu peux faire tontableau.clear()

tiens voilà la doc officielle de ce que tu peux faire avec les ArrayList :
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html
0
k-led87 Messages postés 10 Date d'inscription dimanche 31 mars 2013 Statut Membre Dernière intervention 6 octobre 2013
1 avril 2013 à 04:33
Merci "totodunet" ,la structure ArrayList est la solution du probléme
0
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 199
1 avril 2013 à 12:42
j'avais pas compris comme ça le "mettre tout à 0". et je ne savais pas non plus pour le clear.
Mais oui à mon avis il faut parcourir tout ton tableau case par case soit en utilisant fills soit manuellement car visiblement c'est la seule façon de le mettre directement à jour dans la mémoire. Il doit certainement exister des algorithmes pour les très gros tableaux mais à ce niveau là je ne sais pas du tout comment ça fonctionne.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
1 avril 2013 à 15:02
Si vraiment il fallait optimiser un traitement, on utiliserai des méthodes Java avec le mot-clé "native" qui déléguerait le traitement à une bibliothèque compilée dans un autre langage (c'est souvent le C++). Mais dans le cas qui nous intéresse ici ce serait peu intéressant, car il faudra de toute façon faire en C++ une boucle for qui devra parcourir un à un les cases du tableau...
Ici il faudrait surtout regarder ce que veux faire exactement k-led87, pour peut-être améliorer son algorithme, mais en tout cas l'ArrayList est une fausse bonne idée !
0