Collections en Java (cours 2) Virginia Aponte CNAM-Paris 23 mars 2017 VirginiaAponte (CNAM-Paris) NFA035 23mars2017 1/39 1. Parcourir tableaux/collections : boucle for each VirginiaAponte (CNAM-Paris) NFA035 23mars2017 2/39 Boucle for each Boucledeparcourssurcollectionsettableaux: for (T el : col) { «appliquer actions sur» el; } «PourchaquevaleureldetypeTdanscolappliqueractions.» col:nomdevariabletableauoucollection. T:typedeséléments, el:nomlocaleàlaboucledonnéàchaqueélément; Limitation Accèsàunecopiedechaquecomposante(pasdemodificationcollection). VirginiaAponte (CNAM-Paris) NFA035 23mars2017 3/39 Exemple (1) : parcours d’une collection lc:estunecollectiond’élémentsString; onveutparcourircettecollectionenaffichantsescomposantes. Collection<String> lc = new ArrayList<String>(); ...// ajout de composantes dans lc for (String n : lc) { System.out.println(n); } String:typeéléments, lc:nomdelacollectionquel’onparcoure n:nomlocaldonnéàchaquecomposante, VirginiaAponte (CNAM-Paris) NFA035 23mars2017 4/39 Exemple (2) : parcours d’un tableau Employéicipour«accès»àchaquecasedetab: int [] tab = {1, 2, 3}; // Additionnes ttes cases du tableau int somme = 0; for (int e : tab) { somme = somme + e;; } System.out.println("Somme = "+ somme); Affiche:Somme = 6 Attention Variableen’estpasunecasedutableau,maisunecopiedesoncontenu! VirginiaAponte (CNAM-Paris) NFA035 23mars2017 5/39 Pas de modification de collection/tableau Attention : for each nepermetpastraverser+modifierletableau/collectionenmêmetemps! int [] tab = {1, 2, 3}; for (int e : tab){ e = e*10; // Tentative de modification } System.out.println("Tableau apres:"); for (int e : tab){ System.out.print(" "+ e); } Tableau apres: 1 2 3 ⇒Nonmodifiéaprèslaboucle! VirginiaAponte (CNAM-Paris) NFA035 23mars2017 6/39 2. Remove, itérateurs VirginiaAponte (CNAM-Paris) NFA035 23mars2017 7/39 Modification pendant for-each Impossible modifier tableau/collection via un for each : si tableau ⇒ pas de modification; si collection ⇒ lévée exception ConcurrentModificationException VirginiaAponte (CNAM-Paris) NFA035 23mars2017 8/39 Modification collection dans for-each Tentonsd’enleverlesélémentsquicommencentparA: // Tentative modification sur collection for (String s: union){ if (s.charAt(0)==’A’) union.remove(s); } Exception in thread "main" java.util.ConcurrentModificationException Modification collection pendant itération Seulmoyensûrdelefaire:viauniterator VirginiaAponte (CNAM-Paris) NFA035 23mars2017 9/39 Itérateurs Itérateur Objet detype(interface)Iterator,permettantde«visiter»dansune boucletouslesélémentsd’unecollection.Sesméthodes: T next():obtenirle«prochain»élémentdelacollection; boolean hasNext():trues’ilrestedesélémentsnonencore «visités»; boolean remove():enleveunélémentdelacollectionpendant l’itération Toute collection fornit la méthode Iterator iterator(); permettantdefabriquercetobjet. VirginiaAponte (CNAM-Paris) NFA035 23mars2017 10/39
Description: