Bonjour
Je souhaiterais savoir si vous avez des astuces pour améliorer votre code java.
Je vais commencer par un post que j'ai trouvé sur stackoverflow et qui est vraiment pas mal :
http://stackoverflow.com/questions/1...21889#13721889
Une personne qui souhaite dans une boucle "for" réaliser une action toutes les 50 itérations écrirait un code comme celui-ci :
Mais dans la mesure où le modulo est très gourmand en ressources, il serait préférable d'utiliser deux boucles imbriquées :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for (int i = 0; i < n; i++){ if( i%50 == 0){ Thead.sleep(200); } }
Ce qui donne en terme de temps d'exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 static int counter, counter2; public static long testOneModLoop(int n, int m) { long start = System.nanoTime(); for (int i = 0; i < n; i++) { counter++; if (i % m == m - 1) counter2++; } return System.nanoTime() - start; } public static long testTwoLoops(int n, int m) { long start = System.nanoTime(); for (int j = 0; j < n; j += m) { for (int i = j; i < j + m && i < n; i++) { counter++; } counter2++; } return System.nanoTime() - start; } public static void main(String... args) { for (int i = 0; i < 5; i++) { int runs = 10 * 1000 * 1000; double time1 = (double) testOneModLoop(runs, 50) / runs; double time2 = (double) testTwoLoops(runs, 50) / runs; System.out.printf("Avg time for 1 loop: %.2f ns and 2 loops: %.2f ns%n", time1, time2); } }
On voit qu'entre l'utilisation du modulo et de la seconde méthode on a divisé les temps par 10 voir plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Avg time for 1 loop: 6.09 ns and 2 loops: 0.78 ns Avg time for 1 loop: 3.75 ns and 2 loops: 0.22 ns Avg time for 1 loop: 3.67 ns and 2 loops: 0.19 ns Avg time for 1 loop: 3.72 ns and 2 loops: 0.19 ns Avg time for 1 loop: 3.67 ns and 2 loops: 0.19 ns
A vous si vous avez des astuces de codage !
Partager