salut je voudrais savoir comment faire pour générer tous les entiers d'une borne. Avec mon exemple de 13 à 91253.
j'ai essayer avec :
int n = (Math.random()* 91252 + 13);
mais sa ne génère qu'un entier au hasard.
Pouvez-vous m'aider ?!
Version imprimable
salut je voudrais savoir comment faire pour générer tous les entiers d'une borne. Avec mon exemple de 13 à 91253.
j'ai essayer avec :
int n = (Math.random()* 91252 + 13);
mais sa ne génère qu'un entier au hasard.
Pouvez-vous m'aider ?!
Tu crées une structure pour stocker tes entiers (List ou Set par exemple), puis tu fais un parcours basique pour générer les entiers entre tes deux bornes.
Dans ton cas, ce sera :
Concernant Math.random, c'est tout à fait normal que cela te renvoi un nombre aléatoire, c'est le but de cette méthode, cf javadoc.Code:
1
2
3
4
5 List<Integer> listEntier = new ArrayList<Integer>(); for (int i = 13 ; i < 91252 ; ++i) listEntier.add(i);
ceci sera quand même plus performant
voir carément:Code:
1
2
3
4
5 List<Integer> listEntier = new ArrayList<Integer>(91252-13); for (int i = 13 ; i < 91252 ; ++i) listEntier.add(i);
qui occupera bien moins de mémoire ;)Code:
1
2
3
4
5 int[] listEntier = new int[91252-13]; for (int i = 13 ; i < 91252 ; ++i) listEntier[i-13] =i;
Intéressant...
Pourrais-tu expliquer pourquoi la déclaration du champ de valeur dans l'ArrayList rend le traitement aval plus performant ?
Donc dans ce cas précis, pourquoi :
est mieux que :Code:List<Integer> listEntier = new ArrayList<Integer>(91252-13);
?Code:List<Integer> listEntier = new ArrayList<Integer>();
L'arraylist est une structure de donnée à taille dynamique basée sur un tableau.
Sachant qu'un tableau à une taille définie, quand l'arraylist arrive aux limites de taille du tableau sous jacent, elle créé un nouveau tableau plus grand et y copie ses valeurs stockées.
En passant un int en paramètre du constructeur de l'arraylist, on spécifie directement la taille du talbeau sous jacent, ainsi on épargne le cout des plusieurs redimensionnement successifs.
C'est une excellente pratique que de spécifier une taille initiale en construisant l'arraylist en rapport avec la capacité dont on a besoin.
Merci des infos vous deux :)
Merci bien :)
plus précisément, arraylist commence par défaut avec une taille de 10 et utilise la formule d'agrandissement (tailleActuelle *3) /2+1.
Pour arriver à la taille requise, on se tappe donc la séquence suivante
Soit 23 redimensionnements pour une quantité totale de données transférées de 264714 élément, soit 2M de données qui se baladent de gauche à droite si on suppose qu'une référence java utilise un pointeur 64 bits en interne.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 10 16 25 38 58 88 133 200 301 452 679 1019 1529 2294 3442 5164 7747 11621 17432 26149 39224 58837 88256 132385
De plus, 41146 entrées du tableau restent vide, ce qui, sur le meme calcul, donne ~300K de mémoire gaspillée ;)
bonne analyse, je te remercie !