Vous êtes sur la page 1sur 84

Programmation

Orientée Objet
avancée avec
Java

Dans ce document, la description des classes de l’API ne prétend


aucunement être exhaustive. Reportez-vous à l’API en question pour
connaı̂tre tous les détails de cette classe.
Programmation
Orientée Objet
avancée avec
Java Chapitre II – Collections -
Généricité
Programmation
Orientée Objet
avancée avec
Java Généricité
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface
Collection

V. La classe
Collections Depuis la version 5.0 Java autorise la définition de classes et
VI. Itérateurs d’interfaces contenant un (des) paramètre(s) représentant un type(s).
VII. Classe
ArrayList<T>
Cela permet de décrire une structure qui pourra être personnalisée au
VIII. La classe moment de l’instanciation à tout type d’objet.
HashSet<T>

IX. La classe
TreeSet<T>

X. Interface Map
Programmation
Orientée Objet
avancée avec
Java Exemple
I. Généricité

II. Collections

III. Interface On veut définir une notion de paire d’objets avec deux attributs de
Collection
même type.
IV. Les méthodes
de l’interface public class PaireEntier {
Collection private int premier ;
p r i va t e in t second ;
V. La classe p u b l i c P a i r e E n t i e r ( i n t x , i n t y ){
Collections p r e m i e r =x ; s e c o n d = y ;}
p u b l i c i n t g e t P r e m i e r (){ r e t u r n t h i s . p r e m i e r ;}
VI. Itérateurs
p u b l i c v o i d s e t P r e m i e r ( i n t x ){ t h i s . p r e m i e r=x ;}
VII. Classe p u b l i c i n t g e t S e c o n d (){ r e t u r n t h i s . s e c o n d ;}
ArrayList<T> p u b l i c v o i d s e t S e c o n d ( i n t x ){ t h i s . s e c o n d=x ;}
p u b l i c v o i d i n t e r c h a n g e r (){
VIII. La classe i n t temp = t h i s . p r e m i e r ;
HashSet<T> t h i s . premi er = t h i s . second ;
t h i s . s e c o n d = temp;}
IX. La classe }
TreeSet<T>

X. Interface Map remarque : on a créé une classe spécialement pour des paires
d’entiers ; si on veut des paires de booléens il faudrait réécrire une
autre classe (avec un autre nom) qui contiendrait les mêmes
méthodes.
Programmation
Orientée Objet
avancée avec
Java

I. Généricité public c lass PaireObjet {


pri va t e Object premier ;
II. Collections p r i va t e Object second ;
p u b l i c P a i r e O b j e t ( O b j e c t x , O b j e c t y ){
III. Interface p r e m i e r =x ; s e c o n d = y ;}
Collection p u b l i c P a i r e (){}
p u b l i c O b j e c t g e t P r e m i e r (){ r e t u r n t h i s . p r e m i e r ;}
IV. Les méthodes p u b l i c v o i d s e t P r e m i e r ( O b j e c t x ){ t h i s . p r e m i e r=x ;}
de l’interface p u b l i c O b j e c t g e t S e c o n d (){ r e t u r n t h i s . s e c o n d ;}
Collection p u b l i c v o i d s e t S e c o n d ( O b j e c t y ){ t h i s . s e c o n d=y ;}
V. La classe p u b l i c v o i d i n t e r c h a n g e r (){
Collections O b j e c t temp = t h i s . p r e m i e r ;
t h i s . premi er = t h i s . second ;
VI. Itérateurs t h i s . s e c o n d = temp;}
}
VII. Classe
ArrayList<T>
Inconvénients :
VIII. La classe
HashSet<T>
les deux attributs peuvent des instances de classes différentes,
IX. La classe
TreeSet<T> on peut être amené à faire du transtypage (vers le bas),
X. Interface Map
on risque des erreurs de transtypage qui ne se détecteront qu’à
l’exécution.
Programmation
Orientée Objet
avancée avec
Java

I. Généricité public c lass PaireObjet {


pri va t e Object premier ;
II. Collections p r i va t e Object second ;
p u b l i c P a i r e O b j e t ( O b j e c t x , O b j e c t y ){
III. Interface p r e m i e r =x ; s e c o n d = y ;}
Collection p u b l i c P a i r e (){}
p u b l i c O b j e c t g e t P r e m i e r (){ r e t u r n t h i s . p r e m i e r ;}
IV. Les méthodes p u b l i c v o i d s e t P r e m i e r ( O b j e c t x ){ t h i s . p r e m i e r=x ;}
de l’interface p u b l i c O b j e c t g e t S e c o n d (){ r e t u r n t h i s . s e c o n d ;}
Collection p u b l i c v o i d s e t S e c o n d ( O b j e c t y ){ t h i s . s e c o n d=y ;}
V. La classe p u b l i c v o i d i n t e r c h a n g e r (){
Collections O b j e c t temp = t h i s . p r e m i e r ;
t h i s . premi er = t h i s . second ;
VI. Itérateurs t h i s . s e c o n d = temp;}
}
VII. Classe
ArrayList<T>
Inconvénients :
VIII. La classe
HashSet<T>
les deux attributs peuvent des instances de classes différentes,
IX. La classe
TreeSet<T> on peut être amené à faire du transtypage (vers le bas),
X. Interface Map
on risque des erreurs de transtypage qui ne se détecteront qu’à
l’exécution.
Programmation
Orientée Objet
avancée avec
Java

I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface A et B étant deux classes, on peut avoir ce genre d’utilisation
Collection
A a = new A ( ) ;
V. La classe B b = new B ( ) ;
Collections P a i r e O b j e t p = new P a i r e O b j e t ( a , b ) ;
A a2 = (A) p . g e t P r e m i e r ( ) ; // d o w n c a s t i n g ok
VI. Itérateurs p. interchanger ( );
A a2 = (A) p . g e t P r e m i e r ( ) ; // e r r e u r
VII. Classe
ArrayList<T>

VIII. La classe
HashSet<T>

IX. La classe
TreeSet<T>

X. Interface Map
Programmation
Orientée Objet
avancée avec
Java

I. Généricité La solution est l’utilisation de la généricité, c’est-à-dire l’usage de


II. Collections
type paramètre.
III. Interface
Collection La généricité est une notion de polymorphisme paramétrique.
IV. Les méthodes p u b l i c c l a s s P a i r e<T> {
de l’interface private T premier ;
Collection p r i va t e T second ;
p u b l i c P a i r e (T x , T y ){ // en−t ê t e du c o n s t r u c t e u r s a n s <T>
V. La classe p r e m i e r =x ; s e c o n d = y ;}
Collections p u b l i c P a i r e (){}
p u b l i c T g e t P r e m i e r (){ r e t u r n t h i s . p r e m i e r ;}
VI. Itérateurs
p u b l i c v o i d s e t P r e m i e r (T x ){ t h i s . p r e m i e r=x ;}
VII. Classe p u b l i c T g e t S e c o n d (){ r e t u r n t h i s . s e c o n d ;}
ArrayList<T> p u b l i c v o i d s e t S e c o n d (T y ){ t h i s . s e c o n d=y ;}
p u b l i c v o i d i n t e r c h a n g e r (){
VIII. La classe T temp = t h i s . p r e m i e r ;
HashSet<T> t h i s . premi er = t h i s . second ;
t h i s . s e c o n d = temp;}
IX. La classe }
TreeSet<T>

X. Interface Map Cette définition permet de définir ici des Paire contenant des objets
de type (uniforme) mais arbitraire.
Programmation
Orientée Objet
avancée avec
Java utilisation
I. Généricité

II. Collections

III. Interface
Collection
une classe générique doit être instanciée pour être utilisée
IV. Les méthodes
de l’interface
Collection
on ne peut pas utiliser un type primitif pour l’instanciation, il
V. La classe faut utiliser les classes enveloppantes
Collections

VI. Itérateurs
on ne peut pas instancier avec un type générique
VII. Classe une classe instanciée ne peut pas servir de type de base pour un
ArrayList<T>
tableau
VIII. La classe
HashSet<T>
P a i r e<S t r i n g> p = new P a i r e<S t r i n g >(” b o n j o u r ” , ” M o n s i e u r ” ) ; // o u i
IX. La classe // l e c o n s t r u c t e u r d o i t c o n t e n i r <...> p o u r l ’ i n s t a n c i a t i o n
TreeSet<T> P a i r e<>p2 = new P a i r e <>(); // non
P a i r e<i n t> p3 = new P a i r e<i n t >(1, 2 ) ; // non
X. Interface Map P a i r e<I n t e g e r > p4 = new P a i r e<I n t e g e r >(1 ,2); // o u i
P a i r e<P a i r e> p5 = new P a i r e<P a i r e >(); // non
P a i r e<P a i r e<S t r i n g>> p6 = new P a i r e<P a i r e<S t r i n g >>(p , p ) ; // o u i
P a i r e<I n t e g e r >[] t a b = new P a i r e<I n t e g e r > [ 1 0 ] ; // non
Programmation
Orientée Objet
avancée avec
Java plusieurs types paramètres
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface
Collection
On peut utiliser plusieurs types paramètres
V. La classe p u b l i c c l a s s Pai re D<T , U> {
Collections private T premier ;
p r i va t e U second ;
VI. Itérateurs p u b l i c P a i r e D (T x , U y ){ // en−t ê t e du c o n s t r u c t e u r s a n s <T, U>
p r e m i e r =x ; s e c o n d = y ;}
VII. Classe p u b l i c P a i r e D (){}
ArrayList<T> p u b l i c T g e t P r e m i e r (){ r e t u r n t h i s . p r e m i e r ;}
p u b l i c v o i d s e t P r e m i e r (T x ){ t h i s . p r e m i e r=x ;}
VIII. La classe p u b l i c U g e t S e c o n d (){ r e t u r n t h i s . s e c o n d ;}
HashSet<T> p u b l i c v o i d s e t S e c o n d (U y ){ t h i s . s e c o n d=y ;}
}
IX. La classe ...
TreeSet<T> Pai re D<I n t e g e r , S t r i n g> p = Pai re D<I n t e g e r , S t r i n g >(1, ” b o n j o u r ” ) ;
X. Interface Map
Programmation
Orientée Objet
avancée avec
Java Utilisation du type paramètre
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface
Collection
le type paramètre peut être utilisé pour déclarer des variables
V. La classe
Collections (attributs) sauf dans une méthode de classe
VI. Itérateurs le type paramètre ne peut pas servir à construire un objet.
VII. Classe
ArrayList<T>
p u b l i c c l a s s P a i r e<T> {
VIII. La classe ...
HashSet<T> T v a r ; // o u i
T v a r = new T ( ) ; // non
IX. La classe T [ ] t a b ; // o u i
TreeSet<T> T [ ] t a b = new T [ 1 0 ] ; // non

X. Interface Map
Programmation
Orientée Objet
avancée avec
Java méthodes et généricité
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface
Collection

V. La classe
Une méthode de classe (static) ne peut pas utiliser une variable du
Collections
type paramètre dans une classe générique.
VI. Itérateurs
p u b l i c c l a s s U n e C l a s s e G e n e r i q u e <T>{
VII. Classe ...
ArrayList<T> p u b l i c s t a t i c v o i d m e t h o d e D e C l a s se(){
T v a r ; // e r r e u r à l a c o m p i l a t i o n
VIII. La classe ...
HashSet<T> }}
IX. La classe
TreeSet<T>

X. Interface Map
Programmation
Orientée Objet
avancée avec
Java méthodes et généricité
I. Généricité

II. Collections

III. Interface
Collection
Une méthode (de classe ou d’instance) peut être générique dans une
IV. Les méthodes classe non générique. Elle utilise alors son propre type paramètre.
de l’interface
Collection p u b l i c c l a s s ClasseA{
...
V. La classe p u b l i c <T> T p r e m i e r E l e m e n t(T [ ] t a b ){
Collections r e t u r n t a b [ 0 ] ; } // méthode d ’ i n s t a n c e
//<T> e s t p l a c é a p r è s l e s m o d i f i c a t e u r s e t a v a n t l e t y p e r e n v o yé
VI. Itérateurs p u b l i c s t a t i c <T> T d e r n i e r E l e m e n t (T [ ] t a b ){
r e t u r n t a b [ t a b . l e n g t h −1];} // méthode d e c l a s s e
VII. Classe //<T> e s t p l a c é a p r è s l e s m o d i f i c a t e u r s e t a v a n t l e t y p e r e n v o yé
ArrayList<T> ...
}
VIII. La classe
HashSet<T>

IX. La classe Pour utiliser une telle méthode on doit préfixer le nom de la méthode
TreeSet<T>
par le type d’instanciation entre < et >.
X. Interface Map
C l a s s e A a = new C l a s s e A ( ) ;
S t r i n g [ ] t = {” game” , ” o f ” , ” t h r o n e s ” };
S yste m . o u t . p r i n t l n ( a.< S t r i n g> p r e m i e r E l e m e n t( t ) ) ;
S yste m . o u t . p r i n t l n ( C l a s s e A .< S t r i n g> d e r n i e r E l e m e n t ( t ) ) ;
Programmation
Orientée Objet
avancée avec
Java méthodes et généricité
I. Généricité

II. Collections

III. Interface
Une méthode (de classe ou d’instance) peut être générique dans une
Collection classe générique. Elle peut utiliser le type paramètre de la classe et
IV. Les méthodes
de l’interface
son propre type paramètre.
Collection
p u b l i c c l a s s P a i r e<T> {
V. La classe private T premier ;
Collections p r i va t e T second ;
p u b l i c P a i r e (T x , T y ){ // en−t ê t e du c o n s t r u c t e u r s a n s <T>
VI. Itérateurs p r e m i e r =x ; s e c o n d = y ;}
p u b l i c P a i r e (){}
VII. Classe p u b l i c T g e t P r e m i e r (){ r e t u r n t h i s . p r e m i e r ;}
ArrayList<T> p u b l i c v o i d s e t P r e m i e r (T x ){ t h i s . p r e m i e r=x ;}
p u b l i c T g e t S e c o n d (){ r e t u r n t h i s . s e c o n d ;}
VIII. La classe p u b l i c v o i d s e t S e c o n d (T y ){ t h i s . s e c o n d=y ;}
HashSet<T> p u b l i c v o i d i n t e r c h a n g e r (){
IX. La classe T temp = t h i s . p r e m i e r ;
t h i s . premi er = t h i s . second ;
TreeSet<T>
t h i s . s e c o n d = temp;}
X. Interface Map p u b l i c <U> v o i d v o i r (U v a r ){
S yste m . o u t . p r i n t l n ( ” q u i e s t l à ? ” + v a r ) ;
S yste m . o u t . p r i n t l n ( ” l e p r e m i e r e s t ” + t h i s . p r e m i e r ) ; }
}
...
P a i r e<I n t e g e r > p = new P a i r e<I n t e g e r >(1 ,2);
p .< S t r i n g> v o i r ( ”un ami ” ) ;
Programmation
Orientée Objet
avancée avec
Java exercices
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface
Collection

V. La classe
Collections

VI. Itérateurs
exercice 1 : Réécrire les méthodes equals et toString pour les
VII. Classe
ArrayList<T> deux classes Paire et PaireD.
VIII. La classe
HashSet<T>

IX. La classe
TreeSet<T>

X. Interface Map
Programmation
Orientée Objet
avancée avec
Java Limitation du type paramètre
I. Généricité

II. Collections Instancier une classe générique à un type quelconque peut empêcher
III. Interface d’écrire certaines méthodes.
Collection

IV. Les méthodes


Par exemple pour la classe Paire, on voudrait connaı̂tre le plus
de l’interface
Collection
grands des 2 attributs : cela n’a de sens que si l’instanciation se fait
V. La classe
avec un type dont les objets sont comparables donc qui implémente
Collections
l’interface Comparable avec sa méthode compareTo.
VI. Itérateurs
Java permet de préciser que le type paramètre doit être ainsi :
VII. Classe
ArrayList<T> p u b l i c c l a s s P a i r e<T e x t e n d s Comp arab l e> { . . . }

VIII. La classe
HashSet<T> On peut limiter le type paramètre T par plusieurs interfaces et une
IX. La classe
TreeSet<T>
classe au plus.
X. Interface Map p u b l i c c l a s s P a i r e<T e x t e n d s Comp arab l e & C l o n e a b l e & U n e A u t r e C l a s s e> { . . . }

Comparable et Cloneable sont des interfaces et UneAutreClasse


est une classe.
A l’instanciation le type choisi pour T devra implémenter les 2
interfaces et être une sous-classe de UneAutreClasse.
Programmation
Orientée Objet
avancée avec
Java Généricité et héritage
I. Généricité

II. Collections
une classe générique peut étendre une classe (générique ou pas)
III. Interface
Collection p u b l i c c l a s s T r i p l e t<T> e x t e n d s P a i r e<T>{
T troisieme ;
IV. Les méthodes ...}
de l’interface
Collection

V. La classe Triplet< T > est une sous classe de Paire< T >


Collections

VI. Itérateurs
Triplet< String > est une sous classe de Paire< String >
VII. Classe
ArrayList<T>
Triplet< String > n’est pas une sous classe de Paire< T >
VIII. La classe Triplet< String > n’est pas une sous classe de Paire< Object >
HashSet<T>
bien que String soit une sous classe de Object
IX. La classe
TreeSet<T>
Triplet< String > n’est pas une sous classe de
X. Interface Map
Triplet< Object > bien que String soit une sous classe de
Object
Ce dernier point interdit donc une affectation du genre
T r i p l e t<I n t e g e r > t = new T r i p l e t<S h o r t >();
Programmation
Orientée Objet
avancée avec
Java Collections
I. Généricité

II. Collections Java propose plusieurs moyens de manipuler des ensembles d’objets :
III. Interface
Collection
on a vu les tableaux dont l’inconvénient est de ne pas être dynamique
IV. Les méthodes
vis à vis de leur taille.
de l’interface
Collection
Java fournit des interfaces qui permettent de gérer des ensembles
V. La classe d’objets dans des structures qui peuvent être parcourues.
Collections
Ce chapitre donne un aperçu de ces collections. Elles sont toutes
VI. Itérateurs
génériques.
VII. Classe
ArrayList<T> Toutes les collections d’objets
VIII. La classe
HashSet<T> sont dans le paquetage java.util
IX. La classe
TreeSet<T>
implémentent l’interface générique Collection
X. Interface Map L’interface Set< T > sert à implémenter les collections de type
ensemble : les éléments n’y figurent qu’une fois et ne sont pas
ordonnés.
L’interface List< T > sert à implémenter les collections dont les
éléments sont ordonnées et qui autorisent la répétition.
Programmation
Orientée Objet
avancée avec
Java Interface Collection
I. Généricité

II. Collections

III. Interface les interfaces sont en vert, les classes abstraites en bleu et les classes
Collection

IV. Les méthodes


en rouge, et T est le type paramètre des éléments des collections ; les
de l’interface
Collection
lignes simples indiquent l’héritage et les lignes doubles
V. La classe
l’implémentation. (Le schéma est partiel il existe d’autres classes).
Collections

VI. Itérateurs Collection< T >

VII. Classe
ArrayList<T> Set< T > List< T >

VIII. La classe AbstractCollection< T >


HashSet<T>

IX. La classe SortedSet< T > AbstractSet< T > AbstractList< T >


TreeSet<T>

X. Interface Map AbstractSequentialList< T > ArrayList< T > Vector< T >

TreeSet< T > HashSet< T > LinkedList< T > Stack<T>


Programmation
Orientée Objet
avancée avec
Java Les méthodes
I. Généricité

II. Collections
boolean add(T e) ajoute l’élément fourni en paramètre à la
III. Interface
Collection collection. La valeur de retour indique si la collection a été mise
IV. Les méthodes à jour
de l’interface
Collection boolean addAll(Collection) ajoute à la collection tous les
V. La classe
Collections
éléments de la collection fournie en paramètre
VI. Itérateurs void clear() supprime tous les éléments de la collection
VII. Classe
ArrayList<T> boolean contains(T e) indique si la collection contient au
VIII. La classe moins un élément identique à celui fourni en paramètre
HashSet<T>

IX. La classe boolean containsAll(Collection) indique si tous les


TreeSet<T>
éléments de la collection fournie en paramètre sont contenus
X. Interface Map
dans la collection
boolean isEmpty() indique si la collection est vide
Iterator iterator() renvoie un objet qui permet de
parcourir l’ensemble des éléments de la collection
Programmation
Orientée Objet
avancée avec
Java Les méthodes
I. Généricité

II. Collections
boolean add(T e) ajoute l’élément fourni en paramètre à la
III. Interface
Collection collection. La valeur de retour indique si la collection a été mise
IV. Les méthodes à jour
de l’interface
Collection boolean addAll(Collection) ajoute à la collection tous les
V. La classe
Collections
éléments de la collection fournie en paramètre
VI. Itérateurs void clear() supprime tous les éléments de la collection
VII. Classe
ArrayList<T> boolean contains(T e) indique si la collection contient au
VIII. La classe moins un élément identique à celui fourni en paramètre
HashSet<T>

IX. La classe boolean containsAll(Collection) indique si tous les


TreeSet<T>
éléments de la collection fournie en paramètre sont contenus
X. Interface Map
dans la collection
boolean isEmpty() indique si la collection est vide
Iterator iterator() renvoie un objet qui permet de
parcourir l’ensemble des éléments de la collection
Programmation
Orientée Objet
avancée avec
Java Les méthodes
I. Généricité

II. Collections
boolean add(T e) ajoute l’élément fourni en paramètre à la
III. Interface
Collection collection. La valeur de retour indique si la collection a été mise
IV. Les méthodes à jour
de l’interface
Collection boolean addAll(Collection) ajoute à la collection tous les
V. La classe
Collections
éléments de la collection fournie en paramètre
VI. Itérateurs void clear() supprime tous les éléments de la collection
VII. Classe
ArrayList<T> boolean contains(T e) indique si la collection contient au
VIII. La classe moins un élément identique à celui fourni en paramètre
HashSet<T>

IX. La classe boolean containsAll(Collection) indique si tous les


TreeSet<T>
éléments de la collection fournie en paramètre sont contenus
X. Interface Map
dans la collection
boolean isEmpty() indique si la collection est vide
Iterator iterator() renvoie un objet qui permet de
parcourir l’ensemble des éléments de la collection
Programmation
Orientée Objet
avancée avec
Java Les méthodes
I. Généricité

II. Collections
boolean add(T e) ajoute l’élément fourni en paramètre à la
III. Interface
Collection collection. La valeur de retour indique si la collection a été mise
IV. Les méthodes à jour
de l’interface
Collection boolean addAll(Collection) ajoute à la collection tous les
V. La classe
Collections
éléments de la collection fournie en paramètre
VI. Itérateurs void clear() supprime tous les éléments de la collection
VII. Classe
ArrayList<T> boolean contains(T e) indique si la collection contient au
VIII. La classe moins un élément identique à celui fourni en paramètre
HashSet<T>

IX. La classe boolean containsAll(Collection) indique si tous les


TreeSet<T>
éléments de la collection fournie en paramètre sont contenus
X. Interface Map
dans la collection
boolean isEmpty() indique si la collection est vide
Iterator iterator() renvoie un objet qui permet de
parcourir l’ensemble des éléments de la collection
Programmation
Orientée Objet
avancée avec
Java Les méthodes
I. Généricité

II. Collections
boolean add(T e) ajoute l’élément fourni en paramètre à la
III. Interface
Collection collection. La valeur de retour indique si la collection a été mise
IV. Les méthodes à jour
de l’interface
Collection boolean addAll(Collection) ajoute à la collection tous les
V. La classe
Collections
éléments de la collection fournie en paramètre
VI. Itérateurs void clear() supprime tous les éléments de la collection
VII. Classe
ArrayList<T> boolean contains(T e) indique si la collection contient au
VIII. La classe moins un élément identique à celui fourni en paramètre
HashSet<T>

IX. La classe boolean containsAll(Collection) indique si tous les


TreeSet<T>
éléments de la collection fournie en paramètre sont contenus
X. Interface Map
dans la collection
boolean isEmpty() indique si la collection est vide
Iterator iterator() renvoie un objet qui permet de
parcourir l’ensemble des éléments de la collection
Programmation
Orientée Objet
avancée avec
Java Les méthodes
I. Généricité

II. Collections
boolean add(T e) ajoute l’élément fourni en paramètre à la
III. Interface
Collection collection. La valeur de retour indique si la collection a été mise
IV. Les méthodes à jour
de l’interface
Collection boolean addAll(Collection) ajoute à la collection tous les
V. La classe
Collections
éléments de la collection fournie en paramètre
VI. Itérateurs void clear() supprime tous les éléments de la collection
VII. Classe
ArrayList<T> boolean contains(T e) indique si la collection contient au
VIII. La classe moins un élément identique à celui fourni en paramètre
HashSet<T>

IX. La classe boolean containsAll(Collection) indique si tous les


TreeSet<T>
éléments de la collection fournie en paramètre sont contenus
X. Interface Map
dans la collection
boolean isEmpty() indique si la collection est vide
Iterator iterator() renvoie un objet qui permet de
parcourir l’ensemble des éléments de la collection
Programmation
Orientée Objet
avancée avec
Java Les méthodes
I. Généricité

II. Collections
boolean add(T e) ajoute l’élément fourni en paramètre à la
III. Interface
Collection collection. La valeur de retour indique si la collection a été mise
IV. Les méthodes à jour
de l’interface
Collection boolean addAll(Collection) ajoute à la collection tous les
V. La classe
Collections
éléments de la collection fournie en paramètre
VI. Itérateurs void clear() supprime tous les éléments de la collection
VII. Classe
ArrayList<T> boolean contains(T e) indique si la collection contient au
VIII. La classe moins un élément identique à celui fourni en paramètre
HashSet<T>

IX. La classe boolean containsAll(Collection) indique si tous les


TreeSet<T>
éléments de la collection fournie en paramètre sont contenus
X. Interface Map
dans la collection
boolean isEmpty() indique si la collection est vide
Iterator iterator() renvoie un objet qui permet de
parcourir l’ensemble des éléments de la collection
Programmation
Orientée Objet
avancée avec
Java Les méthodes - suite
I. Généricité

II. Collections boolean remove(T e) supprime l’élément fourni en paramètre


III. Interface
Collection
de la collection. La valeur de retour indique si la collection a été
IV. Les méthodes
mise à jour
de l’interface
Collection boolean removeAll(Collection) supprime tous les éléments
V. La classe
Collections
de la collection qui sont contenus dans la collection fournie en
VI. Itérateurs
paramètre
VII. Classe int size() renvoie le nombre d’éléments contenu dans la
ArrayList<T>

VIII. La classe
collection
HashSet<T>
Object[] toArray() renvoie d’un tableau d’objets qui contient
IX. La classe
TreeSet<T> tous les éléments de la collection
X. Interface Map
int hashCode()
Remarque : en Java, chaque instance d’une classe a un hashCode
fourni par la méthode hashCode() de la classe Object. Cette
méthode associe à l’adresse mémoire de l’instance une valeur entière
de type int.
Programmation
Orientée Objet
avancée avec
Java Les méthodes - suite
I. Généricité

II. Collections boolean remove(T e) supprime l’élément fourni en paramètre


III. Interface
Collection
de la collection. La valeur de retour indique si la collection a été
IV. Les méthodes
mise à jour
de l’interface
Collection boolean removeAll(Collection) supprime tous les éléments
V. La classe
Collections
de la collection qui sont contenus dans la collection fournie en
VI. Itérateurs
paramètre
VII. Classe int size() renvoie le nombre d’éléments contenu dans la
ArrayList<T>

VIII. La classe
collection
HashSet<T>
Object[] toArray() renvoie d’un tableau d’objets qui contient
IX. La classe
TreeSet<T> tous les éléments de la collection
X. Interface Map
int hashCode()
Remarque : en Java, chaque instance d’une classe a un hashCode
fourni par la méthode hashCode() de la classe Object. Cette
méthode associe à l’adresse mémoire de l’instance une valeur entière
de type int.
Programmation
Orientée Objet
avancée avec
Java Les méthodes - suite
I. Généricité

II. Collections boolean remove(T e) supprime l’élément fourni en paramètre


III. Interface
Collection
de la collection. La valeur de retour indique si la collection a été
IV. Les méthodes
mise à jour
de l’interface
Collection boolean removeAll(Collection) supprime tous les éléments
V. La classe
Collections
de la collection qui sont contenus dans la collection fournie en
VI. Itérateurs
paramètre
VII. Classe int size() renvoie le nombre d’éléments contenu dans la
ArrayList<T>

VIII. La classe
collection
HashSet<T>
Object[] toArray() renvoie d’un tableau d’objets qui contient
IX. La classe
TreeSet<T> tous les éléments de la collection
X. Interface Map
int hashCode()
Remarque : en Java, chaque instance d’une classe a un hashCode
fourni par la méthode hashCode() de la classe Object. Cette
méthode associe à l’adresse mémoire de l’instance une valeur entière
de type int.
Programmation
Orientée Objet
avancée avec
Java Les méthodes - suite
I. Généricité

II. Collections boolean remove(T e) supprime l’élément fourni en paramètre


III. Interface
Collection
de la collection. La valeur de retour indique si la collection a été
IV. Les méthodes
mise à jour
de l’interface
Collection boolean removeAll(Collection) supprime tous les éléments
V. La classe
Collections
de la collection qui sont contenus dans la collection fournie en
VI. Itérateurs
paramètre
VII. Classe int size() renvoie le nombre d’éléments contenu dans la
ArrayList<T>

VIII. La classe
collection
HashSet<T>
Object[] toArray() renvoie d’un tableau d’objets qui contient
IX. La classe
TreeSet<T> tous les éléments de la collection
X. Interface Map
int hashCode()
Remarque : en Java, chaque instance d’une classe a un hashCode
fourni par la méthode hashCode() de la classe Object. Cette
méthode associe à l’adresse mémoire de l’instance une valeur entière
de type int.
Programmation
Orientée Objet
avancée avec
Java Les méthodes - suite
I. Généricité

II. Collections boolean remove(T e) supprime l’élément fourni en paramètre


III. Interface
Collection
de la collection. La valeur de retour indique si la collection a été
IV. Les méthodes
mise à jour
de l’interface
Collection boolean removeAll(Collection) supprime tous les éléments
V. La classe
Collections
de la collection qui sont contenus dans la collection fournie en
VI. Itérateurs
paramètre
VII. Classe int size() renvoie le nombre d’éléments contenu dans la
ArrayList<T>

VIII. La classe
collection
HashSet<T>
Object[] toArray() renvoie d’un tableau d’objets qui contient
IX. La classe
TreeSet<T> tous les éléments de la collection
X. Interface Map
int hashCode()
Remarque : en Java, chaque instance d’une classe a un hashCode
fourni par la méthode hashCode() de la classe Object. Cette
méthode associe à l’adresse mémoire de l’instance une valeur entière
de type int.
Programmation
Orientée Objet
avancée avec
Java La classe Collections
I. Généricité

II. Collections

III. Interface
Collection La classe java.util.Collections (notez le pluriel) contient des
IV. Les méthodes méthodes statiques qui opérent sur des objets List ou autre (Set,
de l’interface
Collection Map ...) ou bien renvoie des objets.
V. La classe
Collections void sort(List list) trie le paramètre list
VI. Itérateurs
void sort(List list, reverseOrder() ) trie le paramètre
VII. Classe
ArrayList<T> list en ordre décroissant
VIII. La classe
HashSet<T>
Object max(Collection coll) renvoie le plus grand objet
IX. La classe Object min(Collection coll) renvoie le plus petit objet
TreeSet<T>

X. Interface Map ...


On peut utiliser ces méthodes statiques sur des objets de toutes les
classes du schéma précédent.
Programmation
Orientée Objet
avancée avec
Java Itérateurs
I. Généricité
Un iterateur est un objet utilisé avec une collection pour fournir un
II. Collections
accès séquentiel aux éléments de cette collection.
III. Interface
Collection L’interface Iterator permet de fixer le comportement d’un itérateur.
IV. Les méthodes
de l’interface boolean hasNext() indique s’il reste au moins un élément à
Collection

V. La classe
parcourir dans la collection
Collections
T next() renvoie le prochain élément dans la collection
VI. Itérateurs

VII. Classe void remove() supprime le dernier élément parcouru (celui


ArrayList<T>
renvoyé par le dernier appel à la méthode next())
VIII. La classe
HashSet<T>
La méthode next() lève une exception de type
IX. La classe
TreeSet<T> NoSuchElementException si elle est appelée alors que la fin du
X. Interface Map parcours des éléments est atteinte.
La méthode remove() lève une exception de type
IllegalStateException si l’appel ne correspond à aucun appel à
next(). Cette méthode est optionnelle (exception
UnsupportedOperationException).
On ne peut pas faire deux appels consécutifs à remove().
Programmation
Orientée Objet
avancée avec
Java Remarques
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface
A sa construction un itérateur doit être lié à une collection.
Collection
A sa construction un itérateur se place tout au début de la
V. La classe
Collections collection.
VI. Itérateurs
On ne peut pas ≪ réinitialiser ≫ un itérateur ; pour parcourir de
VII. Classe
ArrayList<T> nouveau la collection il faut créer un nouvel itérateur.
VIII. La classe
HashSet<T> Java utilise un itérateur pour implémenter la boucle for each
IX. La classe de syntaxe suivante
TreeSet<T>
C o l l e c t i o n<T> c = new . . . ;
X. Interface Map f o r (T e l e m e n t : c ) { . . . } // p o u r c h aq u e o b j e t e l e m e n t d e t y p e T d e ma c o l l a c t i o n c f a i r e
Programmation
Orientée Objet
avancée avec
Java méthode toString()
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface
Collection

V. La classe
Collections

VI. Itérateurs
Pour tout objet de type Collection, la méthode print ( ou
VII. Classe
println) appelle itérativement la méthode toString() de chacun
ArrayList<T>
de ses éléments.
VIII. La classe
HashSet<T>

IX. La classe
TreeSet<T>

X. Interface Map
Programmation
Orientée Objet
avancée avec
Java Interface ListIterator
L’interface ListIterator<T> étend l’interface Iterator<T> et
I. Généricité
permet de parcourir la collection dans les deux sens.
II. Collections

III. Interface T previous() renvoie l’élément précédent dans la collection


Collection
boolean hasPrevious() teste l’existence d’un élément
IV. Les méthodes
de l’interface précédent
Collection

V. La classe T next() renvoie l’élément suivant de la liste


Collections
T previous() renvoie l’élément précédent de la liste
VI. Itérateurs

VII. Classe
int nextIndex() renvoie l’indice de l’élément qui sera renvoyé
ArrayList<T>
au prochain appel de next()
VIII. La classe
HashSet<T> int previousIndex() renvoie l’indice de l’élément qui sera
IX. La classe
TreeSet<T>
renvoyé au prochain appel de previous()
X. Interface Map void add(T e) ajoute l’élément e à la liste à l’endroit du
curseur (i.e. juste avant l’élément retourné par l’appel suivant à
next())
void remove() supprime le dernier élément retourné par
next() ou previous()
void set(T e) remplace le dernier élément retourné par
next() ou previous() par e
Programmation
Orientée Objet
avancée avec
Java Interface ListIterator
I. Généricité remarques :
II. Collections

III. Interface
next() et previous() lèvent une exception de type
Collection NoSuchElementException
IV. Les méthodes
de l’interface si l’itérateur est en fin de liste alors nextIndex() renvoie la
Collection
taille de la liste
V. La classe
Collections
si l’itérateur est au début de la liste alors nextIndex() renvoie
VI. Itérateurs
-1
VII. Classe
ArrayList<T>
add(), remove() et set(T e) lèvent une exception de type
VIII. La classe
HashSet<T> IllegalStateException si l’appel ne correspond à aucun
IX. La classe appel à next() ou previous(). Elles sont toutes les trois
TreeSet<T>
optionnelles.
X. Interface Map
set(T e) lève une exception de type ClassCastException si
le type de e ne convient pas.
dans toutes les classes prédéfinies implémentant Iterator ou
ListIterator, les méthodes next() et previous() renvoient
les références des objets de la collection.
Programmation
Orientée Objet
avancée avec
Java Classe ArrayList<T>
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface
Collection

V. La classe
Collections
Un ArrayList est un tableau d’objets dont la taille est dynamique.
VI. Itérateurs

VII. Classe
La classe ArrayList<T> implémente en particulier les interfaces
ArrayList<T> Iterator, ListIterator et List.
VIII. La classe
HashSet<T>

IX. La classe
TreeSet<T>

X. Interface Map
Programmation
Orientée Objet
avancée avec
Java Constructeurs
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface public ArrayList(int initialCapacite) crée un
Collection
arrayList vide avec la capacité initialCapacite (positif)
V. La classe
Collections public ArrayList() crée un arrayList vide avec la capacité
VI. Itérateurs
10
VII. Classe
ArrayList<T> public ArrayList(Collection<? extends T> c) crée un
VIII. La classe
HashSet<T>
arrayList contenant tous les éléments de la collection c dans
IX. La classe le même ordre avec une dimension correspondant à la taille
TreeSet<T>
réelle de c et non sa capacité ; le arrayList créé contient les
X. Interface Map
références aux éléments de c (copie de surface).
Programmation
Orientée Objet
avancée avec
Java Méthodes
I. Généricité

II. Collections

III. Interface
Collection
add et addAll ajoute à la fin du tableau
IV. Les méthodes
de l’interface
Collection
void add(int index, T element) ajoute au tableau le
V. La classe
paramètre element à l’indice index en décalant d’un rang vers la
Collections droite les éléments du tableau d’indice supérieur
VI. Itérateurs

VII. Classe
void ensureCapacity(int k) permet d’augmenter la
ArrayList<T> capacité du tableau pour s’assurer qu’il puisse contenir le
VIII. La classe
HashSet<T>
nombre d’éléments passé en paramètre
IX. La classe T get(int index) renvoie l’élément du tableau dont la
TreeSet<T>

X. Interface Map
position est précisée
T set(int index, T element) renvoie l’élément à la position
index et remplace sa valeur par celle du paramètre element
Programmation
Orientée Objet
avancée avec
Java Méthodes
I. Généricité

II. Collections

III. Interface
Collection
int indexOf(Object o) renvoie la position de la première
IV. Les méthodes
de l’interface occurrence de l’élément fourni en paramètre
Collection

V. La classe
int lastIndexOf(Object o) renvoie la position de la dernière
Collections
occurrence de l’élément fourni en paramètre
VI. Itérateurs

VII. Classe
T remove(int index) renvoie l’élément du tableau à l’indice
ArrayList<T> index et le supprime décalant d’un rang vers la gauche les
VIII. La classe
HashSet<T>
éléments d’indice supérieur
IX. La classe
TreeSet<T>
void removeRange(int j,int k) supprime tous les éléments
X. Interface Map
du tableau de la position j incluse jusqu’à la position k exclue
void trimToSize() ajuste la capacité du tableau sur sa taille
actuelle
Programmation
Orientée Objet
avancée avec
Java Exemple
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface On veut gérer un ensemble de personnes connaissant leur age, poids
Collection
et taille par ordre de risque décroissant de problème cardiaque
V. La classe
Collections compte tenu de ces données.
VI. Itérateurs On définit
VII. Classe
ArrayList<T> la classe Personne (nom, prenom)
VIII. La classe
HashSet<T> la classe PersonneMedicalise (étend Personne avec age,
IX. La classe taille, poids, implémente l’interface Comparable)
TreeSet<T>

X. Interface Map
la classe EnsPersonneMedicale qui utilise ArrayList.
Programmation
Orientée Objet
avancée avec
Java

I. Généricité
p u b l i c c l a s s P e r s o n n e M e d i c a l i s e e x t e n d s P e r s o n n e i mpl ement s Comp arab l e {
II. Collections
....
III. Interface p u b l i c i n t compareTo ( O b j e c t p){
Collection i f ( t h i s . ge tAge ()> ( ( P e r s o n n e M e d i c a l i s e ) p ) . ge tAge ( ) ) r e t u r n −1; e l s e
i f ( t h i s . ge tAge ()< ( ( P e r s o n n e M e d i c a l i s e ) p ) . ge tAge ( ) ) r e t u r n 1 ; e l s e
IV. Les méthodes i f ( t h i s . g e t P o i d s ()> ( ( P e r s o n n e M e d i c a l i s e ) p ) . g e t P o i d s ( ) ) r e t u r n −1; e l s e
de l’interface i f ( t h i s . g e t P o i d s ()< ( ( P e r s o n n e M e d i c a l i s e ) p ) . g e t P o i d s ( ) ) r e t u r n 1 ; e l s e
Collection return 0;
}}
V. La classe
Collections import j ava . u t i l .∗ ;
p u b l i c c l a s s EnsPersonneMedicale {
VI. Itérateurs A r r a y L i s t <P e r s o n n e M e d i c a l i s e> e ;
p u b l i c E n s P e r s o n n e M e d i c a l e ( ) {}
VII. Classe
...
ArrayList<T>
public P e r s o n n e M e d i c a l i s e q u i E s t E n D a n g e r (){
VIII. La classe Collections . sort (e );
HashSet<T> return ( e . get (0));}
p u b l i c i n t ageMoyen (){
IX. La classe I t e r a t o r <P e r s o n n e M e d i c a l i s e> i t = e . i t e r a t o r ( ) ;
TreeSet<T> i n t a =0;
w h i l e ( i t . h a s N e x t ( ) ) a= a+ i t . n e x t ( ) . ge tAge ( ) ;
X. Interface Map i f ( e . s i z e ()>0) r e t u r n ( a / e . s i z e ( ) ) ; e l s e r e t u r n 0;}}
Programmation
Orientée Objet
avancée avec
Java Exercices
I. Généricité

II. Collections

III. Interface exercice 2 : appliquer le crible d’Eratosthène aux cent premiers


Collection
entiers puis afficher tous les nombres premiers inférieurs à 100 en
IV. Les méthodes
de l’interface utilisant la classe ArrayList et un itérateur.
Collection

V. La classe exercice 3 : Écrire un programme qui accepte, sur la ligne de


Collections

VI. Itérateurs
commande, une suite de nombres et qui stocke dans un ArrayList
VII. Classe
ceux qui sont positifs.
ArrayList<T>

VIII. La classe exercice 4 : Écrire un programme qui accepte, sur la ligne de


HashSet<T>
commande, une suite de chaı̂nes de caractères et qui stocke dans un
IX. La classe
TreeSet<T> ArrayList celles qui contiennent au moins une fois le caractère ’a’.
X. Interface Map Faire afficher à l’écran toutes les chaı̂nes ainsi stockées dans la
structure ArrayList.
Ecrire une méthode qui classe le ArrayList par ordre de longueur de
chaı̂nes croissantes puis de nouveau faire afficher les chaı̂nes dans
cet ordre.
Programmation
Orientée Objet
avancée avec
Java Exercices
I. Généricité

II. Collections

III. Interface exercice 5 : la princesse Eve a de nombreux prétendants ; elle décide


Collection
alors de choisir celui qu’elle épousera de la façon suivante :
IV. Les méthodes
de l’interface
Collection les prétendants sont numérotés de 1 à n
V. La classe
Collections
en partant du numéro 1 elle compte par numéro croissant 3
VI. Itérateurs
prétendants et élimine le troisième
VII. Classe
ArrayList<T>
elle réitère le procédé en partant du prétendant suivant le dernier
VIII. La classe
éliminé
HashSet<T>
lorsque la fin de la liste est atteinte elle compte en
IX. La classe
TreeSet<T> recommençant au premier de la liste
X. Interface Map
lorsque le début de la liste est atteint elle compte par numéro
croissant
Ecrire un programme qui affichera le prétendant restant pour une
valeur n quelconque saisie au clavier
Programmation
Orientée Objet
avancée avec
Java HashSet<T>
I. Généricité
La classe HashSet<T> implémente l’interface Set<T> et
II. Collections
l’interface Iterator<T>.
III. Interface
Collection Elle permet de représenter un ensemble ; les éléments ne sont pas
IV. Les méthodes ordonnés par leur ordre d’insertion et chaque élément sera en un seul
de l’interface
Collection exemplaire : par conséquent la méthode boolean add(T e)
V. La classe n’ajoutera pas l’élément e s’il est déjà contenu dans le HashSet. Pour
Collections

VI. Itérateurs
cela l’implémentation d’un HashSet s’appuie sur une table de
VII. Classe
hachage et sur les méthodes equals et hashCode de T.
ArrayList<T>

VIII. La classe
HashSet<T>
Définition
IX. La classe Une table de hachage est un tableau indexé par des entiers (en
TreeSet<T>

X. Interface Map
général) contenant les couples clef-valeur. L’indexation est réalisée
par une fonction de hachage qui associe un indice du tableau à
chaque clef.
Cette fonction doit être idéalement injective pour éviter une collision
(deux clefs différentes ont le même indice). Elle doit de plus assurer
une bonne dispersion des valeurs dans le tableau.
Programmation
Orientée Objet
avancée avec
Java Exemple
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface Par exemple en Java il existe une fonction de hachage standard des
Collection

V. La classe
chaı̂nes de caractères :
Collections

VI. Itérateurs X
i =n−1
VII. Classe h(s) = c(s[i]) × 31n−i −1
ArrayList<T>
i =0
VIII. La classe
HashSet<T>
où s est de type String, et n est la longueur de s et c(s[i]) est le
IX. La classe
TreeSet<T> code ASCII du i + 1 ème caractère de s.
X. Interface Map On a par exemple, h(”toto”) = 3566134.
Programmation
Orientée Objet
avancée avec
Java hashCode()
I. Généricité

II. Collections

III. Interface
Collection
En Java, chaque instance d’une classe a un hashCode fourni par la
IV. Les méthodes
de l’interface méthode hashCode() de la classe Object. Cette méthode associe à
Collection
l’adresse mémoire de l’instance une valeur entière de type int.
V. La classe
Collections Dans certaines architectures, l’espace d’adressage est beaucoup plus
VI. Itérateurs grand que l’intervalle de valeur du type int ; il est donc possible que
VII. Classe
ArrayList<T>
deux objets distincts aient le même hashCode.
VIII. La classe
Donc on constate en pratique que cette fonction de hachage n’est
HashSet<T> pas injective.
IX. La classe
TreeSet<T>
Dans le cas où l’on réécrit la méthode hashCode(), on peut toujours
X. Interface Map revenir à la valeur initiale du hashCode de la classe Object en
utilisant la méthode statique System.identityHashCode(Object
o).
Programmation
Orientée Objet
avancée avec
Java Difficultés
I. Généricité

II. Collections

III. Interface Donc deux objets distincts peuvent avoir le même hashCode ; et de
Collection

IV. Les méthodes


surcroı̂t dans une classe ayant redéfini la méthode equals mais pas
de l’interface
Collection
la méthode hashCode(), deux instances peuvent être égales (selon la
V. La classe
redéfinition de equals) alors que leur hashCode sont différents. Cela
Collections
peut conduire un hashSet a accepté d’ajouter un élément qu’il
VI. Itérateurs
possède déjà.
VII. Classe
ArrayList<T> En effet puisqu’un HashSet doit vérifier si un objet e lui appartient
VIII. La classe pour exécuter la méthode add(e) l’implémentation du HashSet va
HashSet<T>

IX. La classe calculer hashCode(e) modulo la taille de la table et


TreeSet<T>

X. Interface Map
à l’indice correspondant à ce calcul vérifier qu’il ne possède pas
d’élément e2 tel que e.equals(e2) est vrai.
C’est pourquoi il est indispensable que deux éléments égaux aient le
même hashCode.
Programmation
Orientée Objet
avancée avec
Java Exemple
p u b l i c c l a s s T e s t E l e m e n t{
I. Généricité S t r i n g nom ;
p u b l i c T e s t E l e m e n t ( S t r i n g s ){nom=s ;}
II. Collections p u b l i c b o o l e a n e q u a l s ( O b j e c t o){
i f ( o == n u l l ) r e t u r n f a l s e ;
III. Interface
i f (o . g e t C l a s s ()!= t h i s . g e t C l a s s ( ) ) return f a l s e ;
Collection
T e s t E l e m e n t oT = ( T e s t E l e m e n t ) o ;
IV. Les méthodes i f ( t h i s . nom . e q u a l s ( oT . nom ) ) r e t u r n t r u e ; e l s e r e t u r n f a l s e ;}
de l’interface }
Collection p u b l i c c l a s s T e s t H a s h S e t{
Hash S e t<T e s t E l e m e n t> h s = new Hash S e t<T e s t E l e m e n t >();
V. La classe v o i d a j o u t e r ( S t r i n g s ){ h s . add ( new T e s t E l e m e n t ( s ) ) ; }
Collections v o i d a j o u t e r ( T e s t E l e m e n t t ){ h s . add ( t ) ; }
}
VI. Itérateurs p u b l i c c l a s s T e s t{
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g ){
VII. Classe T e s t H a s h S e t t h s = new T e s t H a s h S e t ( ) ;
ArrayList<T> T e s t E l e m e n t t 1 = new T e s t E l e m e n t ( ” t o t o ” ) ;
T e s t E l e m e n t t 2 = new T e s t E l e m e n t ( ” t o t o ” ) ;
VIII. La classe i f ( t 1 . e q u a l s ( t 2 ) ) S yste m . o u t . p r i n t l n ( ” o u i ” ) ; e l s e S yste m . o u t . p r i n t l n ( ” non ” ) ;
HashSet<T> ths . a j o u t e r ( t1 ) ; ths . a j o u t e r ( t2 ) ;
IX. La classe S yste m . o u t . p r i n t l n ( t h s . h s ) ; }
TreeSet<T> }

X. Interface Map
Exécution :
oui
[TestElement@e76cbf7, TestElement@22998b08]
Donc les 2 éléments qui sont égaux au sens de la méthode equals de
TestElement ont été ajoutés ! Cela contredit la définition d’un
HashSet. Ici le hashCode de t1 (et t2) est calculé à partir de son
adresse.
Programmation
Orientée Objet
avancée avec
Java Exemple
p u b l i c c l a s s T e s t E l e m e n t{
I. Généricité S t r i n g nom ;
p u b l i c T e s t E l e m e n t ( S t r i n g s ){nom=s ;}
II. Collections p u b l i c b o o l e a n e q u a l s ( O b j e c t o){
i f ( o == n u l l ) r e t u r n f a l s e ;
III. Interface
i f (o . g e t C l a s s ()!= t h i s . g e t C l a s s ( ) ) return f a l s e ;
Collection
T e s t E l e m e n t oT = ( T e s t E l e m e n t ) o ;
IV. Les méthodes i f ( t h i s . nom . e q u a l s ( oT . nom ) ) r e t u r n t r u e ; e l s e r e t u r n f a l s e ;}
de l’interface }
Collection p u b l i c c l a s s T e s t H a s h S e t{
Hash S e t<T e s t E l e m e n t> h s = new Hash S e t<T e s t E l e m e n t >();
V. La classe v o i d a j o u t e r ( S t r i n g s ){ h s . add ( new T e s t E l e m e n t ( s ) ) ; }
Collections v o i d a j o u t e r ( T e s t E l e m e n t t ){ h s . add ( t ) ; }
}
VI. Itérateurs p u b l i c c l a s s T e s t{
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g ){
VII. Classe T e s t H a s h S e t t h s = new T e s t H a s h S e t ( ) ;
ArrayList<T> T e s t E l e m e n t t 1 = new T e s t E l e m e n t ( ” t o t o ” ) ;
T e s t E l e m e n t t 2 = new T e s t E l e m e n t ( ” t o t o ” ) ;
VIII. La classe i f ( t 1 . e q u a l s ( t 2 ) ) S yste m . o u t . p r i n t l n ( ” o u i ” ) ; e l s e S yste m . o u t . p r i n t l n ( ” non ” ) ;
HashSet<T> ths . a j o u t e r ( t1 ) ; ths . a j o u t e r ( t2 ) ;
IX. La classe S yste m . o u t . p r i n t l n ( t h s . h s ) ; }
TreeSet<T> }

X. Interface Map
Exécution :
oui
[TestElement@e76cbf7, TestElement@22998b08]
Donc les 2 éléments qui sont égaux au sens de la méthode equals de
TestElement ont été ajoutés ! Cela contredit la définition d’un
HashSet. Ici le hashCode de t1 (et t2) est calculé à partir de son
adresse.
Programmation
Orientée Objet
avancée avec
Java Réécrire la méthode hashCode()
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


Afin d’utiliser les instances d’une classe comme éléments d’une
de l’interface
Collection
collection basée sur des tables de hachage (HashSet, HashMap, ...)
V. La classe
il est indispensable de réécrire la méthode hashCode() de façon :
Collections

VI. Itérateurs
elle soit compatible avec equals()
VII. Classe elle soit rapide
ArrayList<T>

VIII. La classe
elle produise le même résultat pour un objet quelque soit le
HashSet<T>
moment de l’appel
IX. La classe
TreeSet<T> ATTENTION : si on change la valeur d’un objet et si son hashCode
X. Interface Map
réécrit à cause de equals est alors modifié on ne pourra pas le
retrouver dans la table grâce à son code.
Programmation
Orientée Objet
avancée avec
Java Exemple
I. Généricité
p u b l i c c l a s s T e s t E l e m e n t{
II. Collections p r i v a t e S t r i n g nom ;
p u b l i c T e s t E l e m e n t ( S t r i n g s ){nom=s ;}
III. Interface
p u b l i c v o i d setNom ( S t r i n g s ){ t h i s . nom=s ;}
Collection
p u b l i c b o o l e a n e q u a l s ( O b j e c t o){
IV. Les méthodes i f ( o == n u l l ) r e t u r n f a l s e ;
de l’interface i f (o . g e t C l a s s ()!= t h i s . g e t C l a s s ( ) ) return f a l s e ;
Collection T e s t E l e m e n t oT = ( T e s t E l e m e n t ) o ;
i f ( t h i s . nom . e q u a l s ( oT . nom ) ) r e t u r n t r u e ; e l s e r e t u r n f a l s e ;}
V. La classe p u b l i c i n t h ash Cod e (){ r e t u r n t h i s . nom . h ash Cod e ( ) ; }
Collections }

VI. Itérateurs p u b l i c c l a s s T e s t{
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g ){
VII. Classe T e s t H a s h S e t t h s = new T e s t H a s h S e t ( ) ;
ArrayList<T> T e s t E l e m e n t t 1 = new T e s t E l e m e n t ( ” t o t o ” ) ;
T e s t E l e m e n t t 2 = new T e s t E l e m e n t ( ” t o t o ” ) ;
VIII. La classe i f ( t 1 . e q u a l s ( t 2 ) ) S yste m . o u t . p r i n t l n ( ” o u i ” ) ; e l s e S yste m . o u t . p r i n t l n ( ” non ” ) ;
HashSet<T> ths . a j o u t e r ( t1 ) ; ths . a j o u t e r ( t2 ) ;
IX. La classe S yste m . o u t . p r i n t l n ( t h s . h s ) ;
TreeSet<T> t 1 . setNom ( ” l o u l o u ” ) ;
i f ( t h s . h s . c o n t a i n s ( t 1 ) ) S yste m . o u t . p r i n t l n ( ” o u i ” ) ; e l s e S yste m . o u t . p r i n t l n ( ” non ” ) ;
X. Interface Map }
}

Exécution :
oui
[TestElement@366a36]
non
Programmation
Orientée Objet
avancée avec
Java Exemple
I. Généricité
p u b l i c c l a s s T e s t E l e m e n t{
II. Collections p r i v a t e S t r i n g nom ;
p u b l i c T e s t E l e m e n t ( S t r i n g s ){nom=s ;}
III. Interface
p u b l i c v o i d setNom ( S t r i n g s ){ t h i s . nom=s ;}
Collection
p u b l i c b o o l e a n e q u a l s ( O b j e c t o){
IV. Les méthodes i f ( o == n u l l ) r e t u r n f a l s e ;
de l’interface i f (o . g e t C l a s s ()!= t h i s . g e t C l a s s ( ) ) return f a l s e ;
Collection T e s t E l e m e n t oT = ( T e s t E l e m e n t ) o ;
i f ( t h i s . nom . e q u a l s ( oT . nom ) ) r e t u r n t r u e ; e l s e r e t u r n f a l s e ;}
V. La classe p u b l i c i n t h ash Cod e (){ r e t u r n t h i s . nom . h ash Cod e ( ) ; }
Collections }

VI. Itérateurs p u b l i c c l a s s T e s t{
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g ){
VII. Classe T e s t H a s h S e t t h s = new T e s t H a s h S e t ( ) ;
ArrayList<T> T e s t E l e m e n t t 1 = new T e s t E l e m e n t ( ” t o t o ” ) ;
T e s t E l e m e n t t 2 = new T e s t E l e m e n t ( ” t o t o ” ) ;
VIII. La classe i f ( t 1 . e q u a l s ( t 2 ) ) S yste m . o u t . p r i n t l n ( ” o u i ” ) ; e l s e S yste m . o u t . p r i n t l n ( ” non ” ) ;
HashSet<T> ths . a j o u t e r ( t1 ) ; ths . a j o u t e r ( t2 ) ;
IX. La classe S yste m . o u t . p r i n t l n ( t h s . h s ) ;
TreeSet<T> t 1 . setNom ( ” l o u l o u ” ) ;
i f ( t h s . h s . c o n t a i n s ( t 1 ) ) S yste m . o u t . p r i n t l n ( ” o u i ” ) ; e l s e S yste m . o u t . p r i n t l n ( ” non ” ) ;
X. Interface Map }
}

Exécution :
oui
[TestElement@366a36]
non
Programmation
Orientée Objet
avancée avec
Java Réécrire la méthode hashCode()
I. Généricité Voici un procédé donnée par Joshua Block dans Effective Java :
II. Collections On initialise un entier : int resultat = 17 ; (un nombre premier)
III. Interface Pour chaque attribut on calcule une valeur entière c selon le tableau
Collection
suivant
IV. Les méthodes
de l’interface
type de l’attribut calcul de c
Collection boolean boo c vaut 0 pour boo vrai
V. La classe
Collections
c vaut 1 pour boo faux
VI. Itérateurs
char, byte, short, int n (int) n
VII. Classe
long l c vaut (int)(l∧ (l >>> 32))
ArrayList<T>
float x c vaut Float.floatToIntBits(x)
VIII. La classe
HashSet<T>
double y on calcule
IX. La classe
l=Double.doubleToLongBits(y)
TreeSet<T> et c vaut (int)(l∧ (l >>> 32))
X. Interface Map
null c vaut 0
Objet o c vaut o.hashCode()
(intervenant dans le code de equals)
tableau t chaque élément de t est traité
comme un attribut à part entière
Pour chaque attribut on calcule resultat = resultat ∗ 37 + c
resultat est le hashCode().
Programmation
Orientée Objet
avancée avec
Java Méthodes
Un HashSet peut contenir null. Les méthodes add, remove,
I. Généricité
contains, size sont exécutées en temps O(1).
II. Collections

III. Interface boolean add(T e) si e n’appartient pas à l’instance de


Collection
HashSet alors e est ajouté et true est renvoyé ; sinon l’instance
IV. Les méthodes
de l’interface n’est pas modifiée et false est renvoyé.
Collection

V. La classe boolean addAll(Collection<? extends T> c) fait l’union


Collections
de la collection c avec l’instance de HashSet ; si cette instance
VI. Itérateurs
est modifiée true est renvoyé sinon false est renvoyé.
VII. Classe
ArrayList<T>
boolean remove(Object e) si e appartient à l’instance de
VIII. La classe
HashSet<T> HashSet alors e est supprimé et true est renvoyé ; sinon false
IX. La classe est renvoyé.
TreeSet<T>

X. Interface Map
boolean removeAll(Collection<? extends T> c) se
comporte de même
boolean retainAll(Collection<?> c) fait l’intersection de
la collection c avec l’instance de HashSet ; si cette instance est
modifiée true est renvoyé sinon false est renvoyé.
void clear() supprime tous les éléments de la collection
remarque : voir API pour les exceptions possibles
Programmation
Orientée Objet
avancée avec
Java Exemple
I. Généricité

II. Collections

III. Interface
Collection p u b l i c c l a s s P e r s o n n e M e d i c a l i s e e x t e n d s P e r s o n n e i mpl ement s Comp arab l e {
....
IV. Les méthodes p u b l i c i n t compareTo ( O b j e c t p){
de l’interface i f ( t h i s . ge tAge ()> ( ( P e r s o n n e M e d i c a l i s e ) p ) . ge tAge ( ) ) r e t u r n −1; e l s e
Collection i f ( t h i s . ge tAge ()< ( ( P e r s o n n e M e d i c a l i s e ) p ) . ge tAge ( ) ) r e t u r n 1 ; e l s e
i f ( t h i s . g e t P o i d s ()> ( ( P e r s o n n e M e d i c a l i s e ) p ) . g e t P o i d s ( ) ) r e t u r n −1; e l s e
V. La classe i f ( t h i s . g e t P o i d s ()< ( ( P e r s o n n e M e d i c a l i s e ) p ) . g e t P o i d s ( ) ) r e t u r n 1 ; e l s e
Collections return 0;
}}
VI. Itérateurs

VII. Classe import j ava . u t i l .∗ ;


ArrayList<T> p u b l i c c l a s s EnsPersonneMedicale {
Hash S e t <P e r s o n n e M e d i c a l i s e> e ;
VIII. La classe p u b l i c E n s P e r s o n n e M e d i c a l e ( ) {}
HashSet<T> ...
public P e r s o n n e M e d i c a l i s e q u i E s t E n D a n g e r (){
IX. La classe r e t u r n ( C o l l e c t i o n s . min ( e ) ) ;
TreeSet<T> }
p u b l i c i n t ageMoyen (){
X. Interface Map I t e r a t o r <P e r s o n n e M e d i c a l i s e> i t = e . i t e r a t o r ( ) ;
i n t a =0;
w h i l e ( i t . h a s N e x t ( ) ) a= a+ i t . n e x t ( ) . ge tAge ( ) ;
i f ( e . s i z e ()>0) r e t u r n ( a / e . s i z e ( ) ) ; e l s e r e t u r n 0;}}
Programmation
Orientée Objet
avancée avec
Java TreeSet<T>
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes La classe TreeSet<T> implémente l’interface Set<T> et


de l’interface
Collection l’interface SortedSet<T>.
V. La classe
Collections
Un TreeSet s’appuie sur un arbre (rouge-noir) pour représenter un
VI. Itérateurs
ensemble d’objets triés par ordre croissant (ordre naturel ou précisé
VII. Classe par la méthode compareTo).
ArrayList<T>
Attention : la classe des éléments d’un TreeSet doit redéfinir la
VIII. La classe
HashSet<T> méthode compareTo et la equals de façon cohérente (equals vrai
IX. La classe doit être équivalent à compareTo vaut 0).
TreeSet<T>

X. Interface Map
Les méthodes add, remove, contains, size sont exécutées en
temps O(log n).
Programmation
Orientée Objet
avancée avec
Java Méthodes
I. Généricité

II. Collections
Outre les méthodes similaires à celles de HashSet on peut citer :
III. Interface public SortedSet<T> subSet(T fromElement, T
Collection
toElement) renvoie le sous-ensemble des éléments compris
IV. Les méthodes
de l’interface entre fromElement inclus jusqu’à toElement exclu
Collection

V. La classe public SortedSet<E> headSet(T toElement) renvoie le


Collections
sous-ensemble des éléments strictement inférieurs à toElement
VI. Itérateurs

VII. Classe
public SortedSet<E> tailSet(E fromElement) renvoie le
ArrayList<T>
sous-ensemble des éléments supérieurs ou égal à fromElement
VIII. La classe
HashSet<T> public T first() renvoie le plus petit élément
IX. La classe
TreeSet<T> public T last() renvoie le plus grand élément
X. Interface Map
public T floor(T e) renvoie le plus grand élément inférieur
ou égal à e
public T ceiling(T e) renvoie le plus petit élément
supérieur ou égal à e
remarque : voir API pour les exceptions possibles
Programmation
Orientée Objet
avancée avec
Java Utilisation d’un joker
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


Dans le code suivant il y a une affectation interdite.
de l’interface
c l a s s A {}
Collection
c l a s s B e x t e n d s A{}
V. La classe ...
Collections L i s t<A> l A = new A r r a y L i s t <A>();
L i s t<B> l B = new A r r a y L i s t <B>();
VI. Itérateurs l A=l B ; // i n t e r d i t

VII. Classe
ArrayList<T> Pour contourner l’interdiction précédente, Java permet d’utiliser un
VIII. La classe
HashSet<T>
joker (ou wildcard) noté ?
IX. La classe L i s t<B> l b = new A r r a y L i s t <B>();
TreeSet<T> L i s t <? e x t e n d s A> l =l B ; // p e r m i s

X. Interface Map
ATTENTION : la liste l ainsi définie ne pourra être utilisée qu’en
lecture.
Programmation
Orientée Objet
avancée avec
Java Usage du joker
I. Généricité

II. Collections

III. Interface
Collection
Le wildcard est très utile pour étendre le type de paramètre d’une
IV. Les méthodes méthode.
de l’interface
Collection Ici la méthode afficher n’autorise que les paramètres de type
V. La classe List<AWild>
Collections
p u b l i c c l a s s AWild { . . . }
VI. Itérateurs p u b l i c c l a s s BWild e x t e n d s A { . . . }
p u b l i c c l a s s T e s t A w i l d B W i l d{
VII. Classe s t a t i c v o i d a f f i c h e r ( L i s t<AWild> l ){
ArrayList<T> f o r ( AWild a : l ){ S yste m . o u t . p r i n t l n ( a ) ; }
}
VIII. La classe
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g ){
HashSet<T>
L i s t<AWild> l A = new A r r a y L i s t <AWild >();
IX. La classe L i s t<BWild> l B = new A r r a y L i s t <BWild >();
TreeSet<T> l A . add ( new AWild ( 1 ) ) ;
l A . add ( new BWild ( 2 ) ) ;
X. Interface Map l B . add ( new BWild ( 3 ) ) ;
a f f i c h e r ( lA ) ;
a f f i c h e r ( l B ) ; // e r r e u r à l a c o m p i l a t i o n
// c a r l B n ’ e s t p a s d ’ un s o u s−t y p e du t y p e d e l A
}}
Programmation
Orientée Objet
avancée avec
Java Usage du joker
I. Généricité

II. Collections

III. Interface Avec le wildcard la méthode afficher fonctionnera sur toutes listes
Collection
contenant des sous-types de AWild :
IV. Les méthodes
de l’interface p u b l i c c l a s s AWild { . . . }
Collection p u b l i c c l a s s BWild e x t e n d s A { . . . }
p u b l i c c l a s s T e s t A w i l d B W i l d{
V. La classe s t a t i c v o i d a f f i c h e r ( L i s t <? e x t e n d s AWild> l ){
Collections f o r ( AWild a : l ){ S yste m . o u t . p r i n t l n ( a ) ; }
}
VI. Itérateurs
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g ){
VII. Classe L i s t<AWild> l A = new A r r a y L i s t <AWild >();
ArrayList<T> L i s t<BWild> l B = new A r r a y L i s t <BWild >();
l A . add ( new AWild ( 1 ) ) ;
VIII. La classe l A . add ( new BWild ( 2 ) ) ;
HashSet<T> l B . add ( new BWild ( 3 ) ) ;
a f f i c h e r ( lA ) ;
IX. La classe a f f i c h e r ( l B ) ; // a u t o r i s é
TreeSet<T> }}

X. Interface Map
Remaque : on peut aussi utiliser le wildcard pour toute sur-classe
d’une classe donnée
maMethode ( L i s t <? s u p e r u n e C l a s s e > l ) { . . . }
Programmation
Orientée Objet
avancée avec
Java L’interface Map
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface
Un objet de type Map stocke des couples clef-valeur. On parle aussi
Collection de dictionnaire.
V. La classe
Collections
La clef doit être unique mais une valeur peut avoir plusieurs clefs.
VI. Itérateurs L’interface Map<K,V> fixe les méthodes pour manipuler de tels
VII. Classe couples. Les clefs sont de type K et sont associées aux valeurs de type
ArrayList<T>
V.
VIII. La classe
HashSet<T> Toutes les collections de couples clef-valeur
IX. La classe
TreeSet<T> sont dans le paquetage java.util
X. Interface Map
implémentent l’interface générique Map<K,V>
Programmation
Orientée Objet
avancée avec
Java Des méthodes de l’interface
I. Généricité Map<K,V>
II. Collections V put(K clef, V valeur) associe valeur à clef. Si clef est
III. Interface
Collection
déjà associée à un objet V alors il est remplacé par le paramètre
IV. Les méthodes valeur puis il est renvoyé (null est renvoyé si clef était associée
de l’interface
Collection à rien)
V. La classe V get(Object clef) renvoie la valeur associée à clef si elle
Collections
existe ou null sinon.
VI. Itérateurs

VII. Classe
boolean containsKey(Object clef) indique si un élément
ArrayList<T> est associée au paramètre clef
VIII. La classe
HashSet<T>
boolean containsValue(Object valeur) indique si le
IX. La classe paramètre valeur est associée à au moins une clef
TreeSet<T>
boolean isEmpty() indique si la collection est vide
X. Interface Map
Set<K> keySet() renvoie un ensemble constitué des clefs de
l’objet
Collection<V> values() renvoie la collection constituée des
valeurs de l’objet
Set<Map.Entry<K,V> > entrySet() renvoie un ensemble
constitué des couples (clefs,valeurs)
Se référer à l’API Java pour voir toutes les méthodes.
Programmation
Orientée Objet
avancée avec
Java Des méthodes de l’interface
I. Généricité Map<K,V>
II. Collections V put(K clef, V valeur) associe valeur à clef. Si clef est
III. Interface
Collection
déjà associée à un objet V alors il est remplacé par le paramètre
IV. Les méthodes valeur puis il est renvoyé (null est renvoyé si clef était associée
de l’interface
Collection à rien)
V. La classe V get(Object clef) renvoie la valeur associée à clef si elle
Collections
existe ou null sinon.
VI. Itérateurs

VII. Classe
boolean containsKey(Object clef) indique si un élément
ArrayList<T> est associée au paramètre clef
VIII. La classe
HashSet<T>
boolean containsValue(Object valeur) indique si le
IX. La classe paramètre valeur est associée à au moins une clef
TreeSet<T>
boolean isEmpty() indique si la collection est vide
X. Interface Map
Set<K> keySet() renvoie un ensemble constitué des clefs de
l’objet
Collection<V> values() renvoie la collection constituée des
valeurs de l’objet
Set<Map.Entry<K,V> > entrySet() renvoie un ensemble
constitué des couples (clefs,valeurs)
Se référer à l’API Java pour voir toutes les méthodes.
Programmation
Orientée Objet
avancée avec
Java Des méthodes de l’interface
I. Généricité Map<K,V>
II. Collections V put(K clef, V valeur) associe valeur à clef. Si clef est
III. Interface
Collection
déjà associée à un objet V alors il est remplacé par le paramètre
IV. Les méthodes valeur puis il est renvoyé (null est renvoyé si clef était associée
de l’interface
Collection à rien)
V. La classe V get(Object clef) renvoie la valeur associée à clef si elle
Collections
existe ou null sinon.
VI. Itérateurs

VII. Classe
boolean containsKey(Object clef) indique si un élément
ArrayList<T> est associée au paramètre clef
VIII. La classe
HashSet<T>
boolean containsValue(Object valeur) indique si le
IX. La classe paramètre valeur est associée à au moins une clef
TreeSet<T>
boolean isEmpty() indique si la collection est vide
X. Interface Map
Set<K> keySet() renvoie un ensemble constitué des clefs de
l’objet
Collection<V> values() renvoie la collection constituée des
valeurs de l’objet
Set<Map.Entry<K,V> > entrySet() renvoie un ensemble
constitué des couples (clefs,valeurs)
Se référer à l’API Java pour voir toutes les méthodes.
Programmation
Orientée Objet
avancée avec
Java Des méthodes de l’interface
I. Généricité Map<K,V>
II. Collections V put(K clef, V valeur) associe valeur à clef. Si clef est
III. Interface
Collection
déjà associée à un objet V alors il est remplacé par le paramètre
IV. Les méthodes valeur puis il est renvoyé (null est renvoyé si clef était associée
de l’interface
Collection à rien)
V. La classe V get(Object clef) renvoie la valeur associée à clef si elle
Collections
existe ou null sinon.
VI. Itérateurs

VII. Classe
boolean containsKey(Object clef) indique si un élément
ArrayList<T> est associée au paramètre clef
VIII. La classe
HashSet<T>
boolean containsValue(Object valeur) indique si le
IX. La classe paramètre valeur est associée à au moins une clef
TreeSet<T>
boolean isEmpty() indique si la collection est vide
X. Interface Map
Set<K> keySet() renvoie un ensemble constitué des clefs de
l’objet
Collection<V> values() renvoie la collection constituée des
valeurs de l’objet
Set<Map.Entry<K,V> > entrySet() renvoie un ensemble
constitué des couples (clefs,valeurs)
Se référer à l’API Java pour voir toutes les méthodes.
Programmation
Orientée Objet
avancée avec
Java Des méthodes de l’interface
I. Généricité Map<K,V>
II. Collections V put(K clef, V valeur) associe valeur à clef. Si clef est
III. Interface
Collection
déjà associée à un objet V alors il est remplacé par le paramètre
IV. Les méthodes valeur puis il est renvoyé (null est renvoyé si clef était associée
de l’interface
Collection à rien)
V. La classe V get(Object clef) renvoie la valeur associée à clef si elle
Collections
existe ou null sinon.
VI. Itérateurs

VII. Classe
boolean containsKey(Object clef) indique si un élément
ArrayList<T> est associée au paramètre clef
VIII. La classe
HashSet<T>
boolean containsValue(Object valeur) indique si le
IX. La classe paramètre valeur est associée à au moins une clef
TreeSet<T>
boolean isEmpty() indique si la collection est vide
X. Interface Map
Set<K> keySet() renvoie un ensemble constitué des clefs de
l’objet
Collection<V> values() renvoie la collection constituée des
valeurs de l’objet
Set<Map.Entry<K,V> > entrySet() renvoie un ensemble
constitué des couples (clefs,valeurs)
Se référer à l’API Java pour voir toutes les méthodes.
Programmation
Orientée Objet
avancée avec
Java Des méthodes de l’interface
I. Généricité Map<K,V>
II. Collections V put(K clef, V valeur) associe valeur à clef. Si clef est
III. Interface
Collection
déjà associée à un objet V alors il est remplacé par le paramètre
IV. Les méthodes valeur puis il est renvoyé (null est renvoyé si clef était associée
de l’interface
Collection à rien)
V. La classe V get(Object clef) renvoie la valeur associée à clef si elle
Collections
existe ou null sinon.
VI. Itérateurs

VII. Classe
boolean containsKey(Object clef) indique si un élément
ArrayList<T> est associée au paramètre clef
VIII. La classe
HashSet<T>
boolean containsValue(Object valeur) indique si le
IX. La classe paramètre valeur est associée à au moins une clef
TreeSet<T>
boolean isEmpty() indique si la collection est vide
X. Interface Map
Set<K> keySet() renvoie un ensemble constitué des clefs de
l’objet
Collection<V> values() renvoie la collection constituée des
valeurs de l’objet
Set<Map.Entry<K,V> > entrySet() renvoie un ensemble
constitué des couples (clefs,valeurs)
Se référer à l’API Java pour voir toutes les méthodes.
Programmation
Orientée Objet
avancée avec
Java Des méthodes de l’interface
I. Généricité Map<K,V>
II. Collections V put(K clef, V valeur) associe valeur à clef. Si clef est
III. Interface
Collection
déjà associée à un objet V alors il est remplacé par le paramètre
IV. Les méthodes valeur puis il est renvoyé (null est renvoyé si clef était associée
de l’interface
Collection à rien)
V. La classe V get(Object clef) renvoie la valeur associée à clef si elle
Collections
existe ou null sinon.
VI. Itérateurs

VII. Classe
boolean containsKey(Object clef) indique si un élément
ArrayList<T> est associée au paramètre clef
VIII. La classe
HashSet<T>
boolean containsValue(Object valeur) indique si le
IX. La classe paramètre valeur est associée à au moins une clef
TreeSet<T>
boolean isEmpty() indique si la collection est vide
X. Interface Map
Set<K> keySet() renvoie un ensemble constitué des clefs de
l’objet
Collection<V> values() renvoie la collection constituée des
valeurs de l’objet
Set<Map.Entry<K,V> > entrySet() renvoie un ensemble
constitué des couples (clefs,valeurs)
Se référer à l’API Java pour voir toutes les méthodes.
Programmation
Orientée Objet
avancée avec
Java Des méthodes de l’interface
I. Généricité Map<K,V>
II. Collections V put(K clef, V valeur) associe valeur à clef. Si clef est
III. Interface
Collection
déjà associée à un objet V alors il est remplacé par le paramètre
IV. Les méthodes valeur puis il est renvoyé (null est renvoyé si clef était associée
de l’interface
Collection à rien)
V. La classe V get(Object clef) renvoie la valeur associée à clef si elle
Collections
existe ou null sinon.
VI. Itérateurs

VII. Classe
boolean containsKey(Object clef) indique si un élément
ArrayList<T> est associée au paramètre clef
VIII. La classe
HashSet<T>
boolean containsValue(Object valeur) indique si le
IX. La classe paramètre valeur est associée à au moins une clef
TreeSet<T>
boolean isEmpty() indique si la collection est vide
X. Interface Map
Set<K> keySet() renvoie un ensemble constitué des clefs de
l’objet
Collection<V> values() renvoie la collection constituée des
valeurs de l’objet
Set<Map.Entry<K,V> > entrySet() renvoie un ensemble
constitué des couples (clefs,valeurs)
Se référer à l’API Java pour voir toutes les méthodes.
Programmation
Orientée Objet
avancée avec
Java Recommandation sur la classe K
I. Généricité

II. Collections
Pour toutes les classes ci-dessous il est fortement recommandé
III. Interface d’utiliser des objets immuables pour les clefs.
Collection
Un objet immuable est un objet que l’on ne peut pas modifier une
IV. Les méthodes
de l’interface fois qu’il est créé.
Collection
Pour rendre immuables les instances d’une classe il faut :
V. La classe
Collections
la marquer final pour qu’elle n’ait pas de classe fille
VI. Itérateurs

VII. Classe
marquer private les attributs
ArrayList<T>
marquer final les attributs (conseillé)
VIII. La classe
HashSet<T>
ne pas écrire d’accesseurs en écriture (set..)
IX. La classe
TreeSet<T> écrire des accesseurs en lecture (get..) qui renvoient une
X. Interface Map
nouvelle instance de l’attribut lu ou bien un objet immuable
ne pas implémenter Cloneable
Les classes enveloppantes (Byte, Short, Integer, Long,
Float, Double, Character, Boolean) et la classe String sont
immuables.
Programmation
Orientée Objet
avancée avec
Java Recommandation sur la classe K
I. Généricité

II. Collections
Pour toutes les classes ci-dessous il est fortement recommandé
III. Interface d’utiliser des objets immuables pour les clefs.
Collection
Un objet immuable est un objet que l’on ne peut pas modifier une
IV. Les méthodes
de l’interface fois qu’il est créé.
Collection
Pour rendre immuables les instances d’une classe il faut :
V. La classe
Collections
la marquer final pour qu’elle n’ait pas de classe fille
VI. Itérateurs

VII. Classe
marquer private les attributs
ArrayList<T>
marquer final les attributs (conseillé)
VIII. La classe
HashSet<T>
ne pas écrire d’accesseurs en écriture (set..)
IX. La classe
TreeSet<T> écrire des accesseurs en lecture (get..) qui renvoient une
X. Interface Map
nouvelle instance de l’attribut lu ou bien un objet immuable
ne pas implémenter Cloneable
Les classes enveloppantes (Byte, Short, Integer, Long,
Float, Double, Character, Boolean) et la classe String sont
immuables.
Programmation
Orientée Objet
avancée avec
Java Recommandation sur la classe K
I. Généricité

II. Collections
Pour toutes les classes ci-dessous il est fortement recommandé
III. Interface d’utiliser des objets immuables pour les clefs.
Collection
Un objet immuable est un objet que l’on ne peut pas modifier une
IV. Les méthodes
de l’interface fois qu’il est créé.
Collection
Pour rendre immuables les instances d’une classe il faut :
V. La classe
Collections
la marquer final pour qu’elle n’ait pas de classe fille
VI. Itérateurs

VII. Classe
marquer private les attributs
ArrayList<T>
marquer final les attributs (conseillé)
VIII. La classe
HashSet<T>
ne pas écrire d’accesseurs en écriture (set..)
IX. La classe
TreeSet<T> écrire des accesseurs en lecture (get..) qui renvoient une
X. Interface Map
nouvelle instance de l’attribut lu ou bien un objet immuable
ne pas implémenter Cloneable
Les classes enveloppantes (Byte, Short, Integer, Long,
Float, Double, Character, Boolean) et la classe String sont
immuables.
Programmation
Orientée Objet
avancée avec
Java Recommandation sur la classe K
I. Généricité

II. Collections
Pour toutes les classes ci-dessous il est fortement recommandé
III. Interface d’utiliser des objets immuables pour les clefs.
Collection
Un objet immuable est un objet que l’on ne peut pas modifier une
IV. Les méthodes
de l’interface fois qu’il est créé.
Collection
Pour rendre immuables les instances d’une classe il faut :
V. La classe
Collections
la marquer final pour qu’elle n’ait pas de classe fille
VI. Itérateurs

VII. Classe
marquer private les attributs
ArrayList<T>
marquer final les attributs (conseillé)
VIII. La classe
HashSet<T>
ne pas écrire d’accesseurs en écriture (set..)
IX. La classe
TreeSet<T> écrire des accesseurs en lecture (get..) qui renvoient une
X. Interface Map
nouvelle instance de l’attribut lu ou bien un objet immuable
ne pas implémenter Cloneable
Les classes enveloppantes (Byte, Short, Integer, Long,
Float, Double, Character, Boolean) et la classe String sont
immuables.
Programmation
Orientée Objet
avancée avec
Java Recommandation sur la classe K
I. Généricité

II. Collections
Pour toutes les classes ci-dessous il est fortement recommandé
III. Interface d’utiliser des objets immuables pour les clefs.
Collection
Un objet immuable est un objet que l’on ne peut pas modifier une
IV. Les méthodes
de l’interface fois qu’il est créé.
Collection
Pour rendre immuables les instances d’une classe il faut :
V. La classe
Collections
la marquer final pour qu’elle n’ait pas de classe fille
VI. Itérateurs

VII. Classe
marquer private les attributs
ArrayList<T>
marquer final les attributs (conseillé)
VIII. La classe
HashSet<T>
ne pas écrire d’accesseurs en écriture (set..)
IX. La classe
TreeSet<T> écrire des accesseurs en lecture (get..) qui renvoient une
X. Interface Map
nouvelle instance de l’attribut lu ou bien un objet immuable
ne pas implémenter Cloneable
Les classes enveloppantes (Byte, Short, Integer, Long,
Float, Double, Character, Boolean) et la classe String sont
immuables.
Programmation
Orientée Objet
avancée avec
Java Recommandation sur la classe K
I. Généricité

II. Collections
Pour toutes les classes ci-dessous il est fortement recommandé
III. Interface d’utiliser des objets immuables pour les clefs.
Collection
Un objet immuable est un objet que l’on ne peut pas modifier une
IV. Les méthodes
de l’interface fois qu’il est créé.
Collection
Pour rendre immuables les instances d’une classe il faut :
V. La classe
Collections
la marquer final pour qu’elle n’ait pas de classe fille
VI. Itérateurs

VII. Classe
marquer private les attributs
ArrayList<T>
marquer final les attributs (conseillé)
VIII. La classe
HashSet<T>
ne pas écrire d’accesseurs en écriture (set..)
IX. La classe
TreeSet<T> écrire des accesseurs en lecture (get..) qui renvoient une
X. Interface Map
nouvelle instance de l’attribut lu ou bien un objet immuable
ne pas implémenter Cloneable
Les classes enveloppantes (Byte, Short, Integer, Long,
Float, Double, Character, Boolean) et la classe String sont
immuables.
Programmation
Orientée Objet
avancée avec
Java Les implémentations
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes


de l’interface La classe HashMap<K,V> implémente l’interface Map<K,V> avec
Collection
une table de hachage. null peut être une clef.
V. La classe
Collections La classe Hashtable<K,V> implémente l’interface Map<K,V> avec
VI. Itérateurs une table de hachage. null ne peut pas être une clef.
VII. Classe
ArrayList<T>
La classe TreeMap<K,V> implémente l’interface Map<K,V> avec un
VIII. La classe arbre rouge noir pour un ordre naturel sur les clefs ou bien avec un
HashSet<T>
Comparator sur les clefs.
IX. La classe
TreeSet<T> Cette dernière classe implémente l’interface SortedMap et a des
X. Interface Map méthodes spécifiques s’appuyant sur l’ordre des clefs.
Programmation
Orientée Objet
avancée avec
Java Itérer sur un objet Map
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes On peut utliser plusieurs méthodes :


de l’interface
Collection utiliser une boucle foreach sur l’ensemble des clefs obtenu par
V. La classe
Collections
la méthode keySet()
VI. Itérateurs utiliser un itérateur sur l’ensemble des clefs obtenu par la
VII. Classe
ArrayList<T>
méthode keySet()
VIII. La classe utiliser une boucle foreach sur l’ensemble des couples
HashSet<T>

IX. La classe
(clefs,valeurs) obtenu par la méthode entrySet()
TreeSet<T>
utiliser un itérateur sur l’ensemble des couples (clefs,valeurs)
X. Interface Map
obtenu par la méthode entrySet()
Programmation
Orientée Objet
avancée avec
Java Exemple
I. Généricité

II. Collections

III. Interface import j ava . u t i l .∗ ;


Collection p u b l i c c l a s s TestHashMap{
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g ){
IV. Les méthodes HashMap<S t r i n g , S t r i n g> hm = new HashMap<S t r i n g , S t r i n g> ( ) ;
de l’interface S c a n n e r s c = new S c a n n e r ( S yste m . i n ) ;
Collection hm . p u t ( ” P i e r r e ” , ” +33612121212 ” ) ;
hm . p u t ( ” P a u l ” , ” +33614141414 ” ) ;
V. La classe hm . p u t ( ” J a c q u e s ” , ” +33615151515 ” ) ;
Collections S yste m . o u t . p r i n t ( ”nom ? : ” ) ;
S t r i n g nom =s c . n e x t ( ) ;
VI. Itérateurs S yste m . o u t . p r i n t l n (hm . g e t ( nom ) ) ;
f o r (Map . E n t r y<S t r i n g , S t r i n g> s : hm . e n t r y S e t ( ) )
VII. Classe
S yste m . o u t . p r i n t l n ( s ) ;
ArrayList<T>
}}
VIII. La classe
HashSet<T>
Exécution :
IX. La classe
TreeSet<T> nom ? : Pierre
X. Interface Map +33612121212
Paul=+33614141414
Jacques=+33615151515
Pierre=+33612121212
Programmation
Orientée Objet
avancée avec
Java Exemple
I. Généricité

II. Collections

III. Interface import j ava . u t i l .∗ ;


Collection p u b l i c c l a s s TestHashMap{
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g ){
IV. Les méthodes HashMap<S t r i n g , S t r i n g> hm = new HashMap<S t r i n g , S t r i n g> ( ) ;
de l’interface S c a n n e r s c = new S c a n n e r ( S yste m . i n ) ;
Collection hm . p u t ( ” P i e r r e ” , ” +33612121212 ” ) ;
hm . p u t ( ” P a u l ” , ” +33614141414 ” ) ;
V. La classe hm . p u t ( ” J a c q u e s ” , ” +33615151515 ” ) ;
Collections S yste m . o u t . p r i n t ( ”nom ? : ” ) ;
S t r i n g nom =s c . n e x t ( ) ;
VI. Itérateurs S yste m . o u t . p r i n t l n (hm . g e t ( nom ) ) ;
f o r (Map . E n t r y<S t r i n g , S t r i n g> s : hm . e n t r y S e t ( ) )
VII. Classe
S yste m . o u t . p r i n t l n ( s ) ;
ArrayList<T>
}}
VIII. La classe
HashSet<T>
Exécution :
IX. La classe
TreeSet<T> nom ? : Pierre
X. Interface Map +33612121212
Paul=+33614141414
Jacques=+33615151515
Pierre=+33612121212
Programmation
Orientée Objet
avancée avec
Java Exemple
I. Généricité

II. Collections

III. Interface import j ava . u t i l .∗ ;


Collection p u b l i c c l a s s TestHashMap{
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g ){
IV. Les méthodes HashMap<S t r i n g , S t r i n g> hm = new HashMap<S t r i n g , S t r i n g> ( ) ;
de l’interface S c a n n e r s c = new S c a n n e r ( S yste m . i n ) ;
Collection hm . p u t ( ” P i e r r e ” , ” +33612121212 ” ) ;
hm . p u t ( ” P a u l ” , ” +33614141414 ” ) ;
V. La classe hm . p u t ( ” J a c q u e s ” , ” +33615151515 ” ) ;
Collections S yste m . o u t . p r i n t ( ”nom ? : ” ) ;
S t r i n g nom =s c . n e x t ( ) ;
VI. Itérateurs S yste m . o u t . p r i n t l n (hm . g e t ( nom ) ) ;
f o r (Map . E n t r y<S t r i n g , S t r i n g> s : hm . e n t r y S e t ( ) )
VII. Classe
S yste m . o u t . p r i n t l n ( s ) ;
ArrayList<T>
}}
VIII. La classe
HashSet<T>
Exécution :
IX. La classe
TreeSet<T> nom ? : Pierre
X. Interface Map +33612121212
Paul=+33614141414
Jacques=+33615151515
Pierre=+33612121212
Programmation
Orientée Objet
avancée avec
Java Exemple
I. Généricité

II. Collections

III. Interface import j ava . u t i l .∗ ;


Collection p u b l i c c l a s s TestHashMap{
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g ){
IV. Les méthodes HashMap<S t r i n g , S t r i n g> hm = new HashMap<S t r i n g , S t r i n g> ( ) ;
de l’interface S c a n n e r s c = new S c a n n e r ( S yste m . i n ) ;
Collection hm . p u t ( ” P i e r r e ” , ” +33612121212 ” ) ;
hm . p u t ( ” P a u l ” , ” +33614141414 ” ) ;
V. La classe hm . p u t ( ” J a c q u e s ” , ” +33615151515 ” ) ;
Collections S yste m . o u t . p r i n t ( ”nom ? : ” ) ;
S t r i n g nom =s c . n e x t ( ) ;
VI. Itérateurs S yste m . o u t . p r i n t l n (hm . g e t ( nom ) ) ;
f o r (Map . E n t r y<S t r i n g , S t r i n g> s : hm . e n t r y S e t ( ) )
VII. Classe
S yste m . o u t . p r i n t l n ( s ) ;
ArrayList<T>
}}
VIII. La classe
HashSet<T>
Exécution :
IX. La classe
TreeSet<T> nom ? : Pierre
X. Interface Map +33612121212
Paul=+33614141414
Jacques=+33615151515
Pierre=+33612121212
Programmation
Orientée Objet
avancée avec
Java Exercice
I. Généricité

II. Collections

III. Interface
Collection

IV. Les méthodes exercice 6 : Dans le but d’établir des statistiques sur les mots
de l’interface
Collection employés dans un document texte de 100000 mots on crée un
V. La classe dictionnaire de couples (int, liste de (mots,flottant))) de la façon
Collections

VI. Itérateurs
suivante : la longueur d’un mot constitue une clef d’une liste ne
VII. Classe
contenant que des mots de cette longueur avec leur fréquence.
ArrayList<T>
Ecrire une classe interne Paire caractérisée par deux attributs
VIII. La classe
HashSet<T> String et Double
IX. La classe Ecrire une méthode void setMot(String s) qui place la chaine de
TreeSet<T>
lettres s dans le dictionnaire en mettant à jour sa fréquence.
X. Interface Map
Ecrire une méthode double frequenceMot(String s) qui renvoie
la fréquence de la chaine s

Vous aimerez peut-être aussi