Je pense que T4 et T5 sont équivalents. Par contre T5 a l'avantage de ne pas créer d'autres tableaux, en ne travaillant que sur la version d'origine. Il faudrait faire le test avec 100 000 000 éléments.
Version imprimable
Je pense que T4 et T5 sont équivalents. Par contre T5 a l'avantage de ne pas créer d'autres tableaux, en ne travaillant que sur la version d'origine. Il faudrait faire le test avec 100 000 000 éléments.
Je viens de tester T5 avec random list de 1000000 d'éléments mais avec la contrainte des nombres aléatoires compris entre 0 et 1000 (exclu), ce qui est le cas semble-t-il de tes fichiers de tests et j'obtiens un temps similaires à T5 testé sur le fichier de 1000000 d'éléments : 61 à 73 ms.
Avec 100 000 000 d'éléments, entre 0 et 1000, 4120 à 4221 ms (EDIT : dans les 12 à 13 s, si je ne borne pas mes aléatoires). Je verrai plus tard pour refaire la batterie complète sur 100 000 000 d'éléments.
Voici le code de mon générateur de fichier. J'avais mis un MAX à 999 en effet.
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 public class Generator { private static final Logger logger = LoggerFactory.getLogger(Generator.class); public static final String NEW_LINE = System.getProperty("line.separator"); public static final int MAX = 999; public static int[] readFromFile(final String fileName) { logger.debug("readFromFile"); logger.debug("fileName: {}", fileName); final File file = new File(fileName); if (!file.exists()) { logger.error("Le fichier n'existe pas"); } final List<Integer> list = new LinkedList<>(); try (final FileReader fr = new FileReader(file);// final BufferedReader br = new BufferedReader(fr);) { for (String line = br.readLine(); line != null; line = br.readLine()) { if (line.isEmpty()) { continue; } if (line.startsWith("#")) { continue; } list.add(Integer.valueOf(line)); } } catch (Exception e) { logger.error(e.getMessage(), e); } final int[] tab = new int[list.size()]; int i = 0; for (final int elt : list) { tab[i++] = elt; } return tab; } public static void generateFile(final String fileName, final int nb) { logger.debug("generateFile"); logger.debug("fileName: {}", fileName); logger.debug("nb: {}", nb); final File file = new File(fileName); try (final FileWriter fw = new FileWriter(file); // final BufferedWriter bw = new BufferedWriter(fw);) { final Random random = new Random(); for (int i = 0; i < nb; i++) { final Integer rand = random.nextInt(MAX); bw.write(rand.toString()); bw.write(NEW_LINE); } } catch (Exception e) { logger.error(e.getMessage(), e); } } public static void main(String[] args) { logger.debug("Generator"); final int[] tailles = { 10, 100, 1_000, 10_000, 100_000, 1_000_000 }; logger.debug("Generation des fichiers."); for (final int nb : tailles) { final String fileName = "src/test/resources/rand_" + nb + ".txt"; generateFile(fileName, nb); } final int[] tab100 = readFromFile("src/test/resources/rand_" + 100 + ".txt"); logger.debug("Lecture des fichiers."); for (final int nb : tailles) { final String fileName = "src/test/resources/rand_" + nb + ".txt"; final int[] tab = readFromFile(fileName); System.out.println(fileName); int i = 0; for (final int elt : tab) { System.out.print(elt); System.out.print("-"); i++; if (i % 100 == 0) { System.out.println(); i = 0; } } } } }