Académique Documents
Professionnel Documents
Culture Documents
Orientée Objet
avancée avec
Java
II. Collections
III. 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é
II. Collections
III. Interface
Collection
VIII. La classe
HashSet<T>
IX. La classe
TreeSet<T>
X. Interface Map
Programmation
Orientée Objet
avancée avec
Java
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
II. Collections
III. Interface
Collection
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
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
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
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> { . . . }
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
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
VII. Classe
ArrayList<T> Set< T > List< T >
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>
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>
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>
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>
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>
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>
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>
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é
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é
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é
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é
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>
V. La classe
parcourir dans la collection
Collections
T next() renvoie le prochain élément dans la collection
VI. Itérateurs
II. Collections
III. Interface
Collection
II. Collections
III. 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
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
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
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
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
VI. Itérateurs
commande, une suite de nombres et qui stocke dans un ArrayList
VII. Classe
ceux qui sont positifs.
ArrayList<T>
II. 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
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
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
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
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
II. Collections
III. Interface
Collection
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
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
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
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
II. Collections
III. Interface
Collection
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
II. Collections
II. Collections
II. Collections
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