Chers Javaïstes, bonjour.
Une question à réponse courte, je pense, mais à explication longue ...
Lors de l'emploi d'ArrayList's, il est souvent recommendé d'utiliser un Iterator ou un ListIterator, car plus performant pour les longues listes (la mienne : 35.100 lignes) qu'un for ou un while().
Un besoin courant est, il me semble, de devoir remplir une ArrayList ligne par ligne par ordre croissant d'une valeur de référence, c à d en positionnant chaque nouvelle soit entre deux lignes existant dans la liste, soit en fin de liste, soit même en modifiant une ligne dont la valeur de référence est la même que celle de la ligne à insérer.
Mais lorsqu'un Iterator ou un ListIterator est employé et que la logique détecte que la dernière ligne lue de l'ArrayList (à l'aide de hasNext()), pour en comparer la valeur de référence à celle de l'élément à insérer, est la première dont la valeur de référence est supérieure à la valeur de référence de l'élément à insérer, et qu'il faut donc reculer d'un élément dans l'ArrayList, quelle instruction d'itérateur est propice pour insérer l'élément juste avant la ligne où en est arrivée le hasNext() ? hasPrevious() ?
Problème d'intérêt général, n'est-ce pas ?
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
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 Object valeurPuiss; ListIterator<DonnéesHor> lItérat; boolean laValeurATrouvéSaPlace; for (int noLigne_TablePrinc = lignesDébutFinDonnées[0] ; noLigne_TablePrinc <= lignesDébutFinDonnées[1] ; noLigne_TablePrinc++ ) { valeurPuiss = tablePrinc.getValueAt(noLigne_TablePrinc, puissTable); if (valeurPuiss != null && (Class<?>) valeurPuiss.getClass() == BigDecimal.class ) { lItérat = donnéesHor_HPlHCr[1].listIterator(); laValeurATrouvéSaPlace = false; /* Trouver entre quelles lignes de la liste 'listeFréquConsoPuiss' insérer * ou bien à quelle ligne ajouter cette valeur de puissance. */ while(lItérat.hasNext()) { DonnéesHor échantDonnéesHor = lItérat.next(); // Si 'puissAnnoncée' de 'échantDonnéesHor' est < 'valeurPuiss', passer au suivant. if ((échantDonnéesHor.puissAnnoncée).compareTo((BigDecimal) valeurPuiss) == -1) { // Rien à faire. } else // Si 'puissAnnoncée' de 'échantDonnéesHor' est = 'valeurPuiss', modifier ce dernier. if ((échantDonnéesHor.puissAnnoncée).compareTo((BigDecimal) valeurPuiss) == 0) { // listeFréquConsoPuiss_HCr().donnéesHor_HCr.puissAnnoncée; // 'puissAnnoncée' reste de même valeur. échantDonnéesHor.nbreApparitions++; // Remplace le dernier élément renvoyé par next() lItérat.set(échantDonnéesHor); laValeurATrouvéSaPlace = true; } else /* Si 'puissAnnoncée' de 'échantDonnéesHor' > 'valeurPuiss', insérer * entre cette ligne et la précédente --> RECULER D'UNE LIGNE. */ if ((échantDonnéesHor.puissAnnoncée).compareTo((BigDecimal) valeurPuiss) == +1) { lItérat.hasPrevious(); DonnéesHor donnéesHor_HCr = new DonnéesHor(); donnéesHor_HCr.puissAnnoncée = ((BigDecimal) valeurPuiss); donnéesHor_HCr.nbreApparitions = 1; donnéesHor_HPlHCr[1].add(? ? ? , donnéesHor_HCr); laValeurATrouvéSaPlace = true; } // Fin des 3 'if (((BigDecimal) valeurPuiss).compareTo( } // Fin du 'while(itérat.hasNext()) // Si fin de la liste, ajouter un nouveau 'donnéesHor' en fin de liste. if (laValeurATrouvéSaPlace != true) { DonnéesHor donnéesHor_HCr = new DonnéesHor(); donnéesHor_HCr.puissAnnoncée = ((BigDecimal) valeurPuiss); donnéesHor_HCr.nbreApparitions = 1; donnéesHor_HPlHCr[HCREUSES_IDX].add(donnéesHor_HCr); // listeFréquConsoPuiss_HCr.get(listeFréquConsoPuiss_HCr.size()-1).nbreApparitions = 22; } } // Fin du 'if (valeurPuiss } // Fin du 'for (noLigne_TablePrinc return listes_PuissEnerg;
Merci d'avance.
Partager