Vous êtes sur la page 1sur 4

TravauxpratiquedeMthodologieetLangagedeProgrammation,UMONS/Polytech,TP5 1

5.Programmation en Java : les collections


LorsdecettesancedeTP,nousverronsl'utilisationdescollectionsJavapermettantdegrer
efficacementunensemblededonnesgroupes.

5.1.Notions

a) Les collections
Unecollectionestunestructurededonnesquipeuttren'importequelensembled'lmentsde
mmetype.Leprogrammeurn'estpaslimitauxseulescollectionsproposesparJavaetpeutdfinirlui
mmesesproprescollectionsoutendredescollectionsexistantes.
Les collections implmentent toutes une interface Collection qui prsente un ensemble de
mthodes(dontcertainessontoptionnelles)visantlagestiondescollections(e.g.conversionentableau,
taille,rcuprationd'objets,etc.).
D'autressousinterfacestendentl'interfaceCollection:
List : permet la gestion de collections pouvant contenir des doublons ; les classes
implmentantcetteinterfacesont:
ArrayList(listedetableaux);

LinkedList(listechane);

Set :permetlagestiondecollectionsnepouvantconteniraucundoublon;lesclasses
implmentantcetteinterfacesont:
HashSet(tablededcoupage);

TreeSet(arbre).

Remarque:lescollectionssesituentdanslepackagejava.util.
Letypededonnesquel'onsouhaiteplacerdanslastructureestdfinilorsdelacrationdecette
dernire.Parexemple,pourunelistedeString,lacrationseferaparexemplecommesuit:
List<String>liste=newLinkedList<String>();

UnautretypedestructurededonnesutilisableenJavaestle Map.Cedernierclasseleslments
parpairecl/valeur.Deuxenregistrementsd'unemmestructureMapnepourrontjamaisavoirlamme
cl.Onretrouveprincipalementdeuxclassesquiimplmententl'interfaceMap:HashMapetTreeMap.
Remarque:l'utilisationdeladocumentationenlignepermettrad'obtenirplusd'informationsur
l'utilisationdecesstructuresdedonnes(http://java.sun.com/j2se/1.5.0/docs/api/).

Toutes les classes implmentant l'interface Collection peuvent tre parcourue de la manire
suivante:
for(Strings:liste){...}

UMONS/Polytech
PierreManneback,SbastienFrmal 20142015
TravauxpratiquedeMthodologieetLangagedeProgrammation,UMONS/Polytech,TP5 2

b)Les itrateurs
En plus de l'interface Collection, les classes List et Set tendent l'interface Iterable
dfinissant une mthode iterator. Cette dernire devra retourner un objet implmentant l'interface
Iterator.CetteinterfaceprsentelesmthodeshasNext,nextetremovequipermettentdesedplacer
auseindelastructurededonnes.Dessousinterfaces de Iterator (e.g. ListIterator)permettent
d'ajouterdesfonctionnalitssuivantletypedestructurededonnes.
Parexemple,leparcoursd'unelistenommeliste1peutsefairedelamaniresuivante:
ListIteratorit=liste1.listIterator();
while(it.hasNext())
{
Objectobj=it.next();
}
Remarque : les Maps n'implmentant pas l'interface Iterable, ils ne permettent pas d'tre
parcourusl'aided'unitrateur.Toutefois,ilserapossibledelefaireenconvertissantchaque Map,l'aide
delamthodevalues,enuneCollectionquivalente(qui,elle,implmentel'interfaceIterable).

c) Les mthodes de la classe Collections


LaclasseCollectionsdfinitdesmthodesstatiquesquiserontutilisespourraliserdiffrents
traitementssurlescollections.Certainesdecesmthodesnes'appliquentquesurdeslistes;c'estlecas
de:
sort:trieleslmentsdelalistedansl'ordrenaturel;ilestpossibledespcifierunobjet
Comparatorpermettantd'expliquersortcommenttrierdeslments;

shuffle:ordonnedemanirealatoireleslmentsdelaliste;

reverse:inversel'ordredeslmentsdelaliste;

fill:rinitaliselalisteavecunevaleurdfinie;

copy:copieunelistedansuneautre.

Remarquons que letri d'lments estnaturel pourdes valeurs numriques mais nel'estpas
forcmentpourdesobjetspluscomplexes.Eneffet,lafonctiondetridoitsavoircommentcomparerdeux
objets en vue de les classer. Dans ce but, on souhaitera implmenter l'interface Comparable<T>
dfinissantunemthodecompareTo.Cettedernireretournera1,0ou1suivantquel'argumentpassla
mthodecompareToestpluspetit,quivalentouplusgrand,ausensdel'ordonnancementque
l'onsouhaiteintroduire.

d)Gnricit
Ilestparfoisncessairedegrerdesclassesoudesmthodespourlesquellesonneconnatpas
l'avanceletypetrait.Onpeutalorsspcifieruntypeindfinidansladclarationdelaclasse,comme
dansl'exemplesuivant:
publicclassPile<E>
LetypeEpeutensuitetreutilisauseindelaclassequiestappeleclassegnrique.

UMONS/Polytech
PierreManneback,SbastienFrmal 20142015
TravauxpratiquedeMthodologieetLangagedeProgrammation,UMONS/Polytech,TP5 3

Il est galement possible de dfinir des mthodes gnriques; on peut alors soit utiliser le
caractre?oufaireprcderletypederetourdelamthodeparletypegnrique:
publicstaticvoidmethod(?el) publicstatic<E>voidmethod(Eel)
On peut galement obliger le type E tre une sousclasse d'une classe dtermine ou
implmenteruneinterfacedtermine:
publicstatic<EextendsPile>voidmethod(Eel)

5.2.Exercices

a) Exercice 1
Onsouhaitegrerunensembled'tudiants.ChaquetudiantseradfiniparuneclasseEtudiant
etdevraprsenterlesinformationssuivantes:
unmatricule;
unnom;
unelistedeCotes(detailleindfinie).
Une classe Cote permettra de contenir pour chaque cours, l'intitul du cours ainsi que la cote
obtenue. Les cotes de chaque tudiant seront stockes dans une ArrayList.
Une mthode addCote permettant d'ajouter une cote l'tudiant sera dfinie.

b)Exercice 2
Onsouhaitemettreenplaceuneclassecapablederaliserdesstatistiquessurunecollection
d'objets,commeparexemple,des Etudiants,desCotes,...Cetteclasse,quiseranommeStats,pourra
ainsicalculerlemaximum,leminimumetlamoyenned'unecollectiond'objets.
Toutes les classes qui peuvent faire l'objet de statistiques implmenteront une interface
Statisticable,quiestdcritecommesuit:
publicinterfaceStatisticable{
publicabstractfloatgetValue();
}
Toutobjetstatisticabledoitdoncavoirunecertainevaleur;pourun Etudiant,onchoisitde
prendrelamoyennedesescotescommevaleurdel' Etudiant.Laclasse Stats seraensuiteutiliseet
donnerapour:
chaquetudiant:
samoyenne;
sameilleurecote;
samoinsbonnecote;
chaquegrouped'tudiants:
lamoyennedugroupe;
lemeilleurtudiant;
lemoinsbontudiant.

UMONS/Polytech
PierreManneback,SbastienFrmal 20142015
TravauxpratiquedeMthodologieetLangagedeProgrammation,UMONS/Polytech,TP5 4

c) Exercice 3
On souhaite pouvoir classer la liste d'tudiants suivant le matricule. Pour ce faire, on
implmenteral'interface ComparabledanslaclasseEtudiant.Lamthode compareTodevradonctre
dfiniedanslaclasseEtudiant.
Remarque:ilserautiledeserfrerladocumentationenlignepourimplmentercorrectement
l'interfaceComparable.
Unefoiscelaralis,ontrieralalisted'tudiantsl'aidedelamthodeCollections.sort.

d)Exercice 4
Onsouhaitegalementpouvoirtrierlalisted'tudiantsparmoyenneetparnom.
Dans ce but, deux nouvelles classes ( CompareMoyenne et CompareNom) seront cres et
implmenterontl'interfaceComparator.Cesclassesdevrontdoncchacunedfinirunemthodecompare
prenant comme arguments les deuxobjets comparer et ralisant untraitement similaire celui de
compareTodansl'exerciceprcdent.

5.3.Bibliographie
1. JAVACommentprogrammerQuatrimedition,HarveyM.Deitel&PaulJ.Deitel
LesditionsReynaldGouletINC.,2002
2. JAVAHowtoprogramSeptimedition,HarveyM.Deitel&PaulJ.DeitelLes
ditionsReynaldGouletINC.,2007
3. Mthodologie et Langages de Programmation, Pierre Manneback, Anne acadmique
2005-2006.

UMONS/Polytech
PierreManneback,SbastienFrmal 20142015