SlideShare a Scribd company logo
1 of 21
Download to read offline
Les collections
Java.util
Youness IDRISSI KHAMLICHI
ENSA-Fès
1
Les collections en Java
À quoi servent les collections ?
 Stocker les données
 Autrement que dans de simples tableaux
des structures de tailles dynamique
des structures adaptées au besoin
 Sans réinventer la roue
 Gagner du temps et de l’énergie
 Bénéficier de classes robustes et performantes
 Fournies par Java en standard
 Dans le package java.util
Plus de détails, plus de documentation, visitez les sites ci-dessous :
https://docs.oracle.com/javase/8/docs/api/java/util/package-summary.html
2
Le package java.util
3
 Plus de détails, plus de documentation, visitez les sites ci-dessous :
 https://docs.oracle.com/javase/7/docs/api/java/util/package-summary.html
 https://docs.oracle.com/javase/8/docs/api/java/util/package-summary.html
I
I
I
I I I I
« List-Set-Map » dans java.util
Map
HashMap HashTable SorteMap
TreeMap
extends
implements
implements
implements
Collection
Set List
ArrayList
extends
implements
extends
HashSet
implements
4
Table de comparaison (List-Set-Map)
List Set Map
Duplication
List permet les éléments en
double.N’importe quel
nombre d’éléments en
double peut être inséré
dans la liste sans affecter les
mêmes valeurs existantes et
leurs index.
Set n’autorise pas les
doublons.Set et toutes les
classes qui implémentent
l’interface Set doivent
avoir des éléments
uniques.
Map stocke les éléments sous forme de
paire clé/valeur. Map n’autorise pas les clés
en double, mais les valeurs en double.
Valeurs
nulles
List autorise n’importe quel
nombre de valeurs NULL.
Set autorise au plus une
valeur NULL unique.
Map peut avoir au plus une clé NULL
unique et un nombre quelconque de valeurs
NULL.
Ordre
List et toutes ses classes
d’implémentation
conservent l’ordre
d’insertion.
Set ne maintient aucun
ordre; encore peu de ses
classes trient les éléments
dans un ordre tel que
LinkedHashSet conserve
les éléments dans l’ordre
d’insertion.
Pareil à Set, Map ne stocke pas non plus les
éléments dans un ordre, mais peu de ses
classes font de même. Par exempleTreeMap
trie la map dans l’ordre croissant des clés et
LinkedHashMap trie les éléments dans
l’ordre d’insertion, l’ordre dans lequel ils
ont été ajoutés à LinkedHashMap.
Les classes
utilisés
ArrayList, LinkedList etc.
HashSet,LinkedHashSet,
TreeSet,SortedSet etc.
HashMap,TreeMap,WeakHashMap,
LinkedHashMap,IdentityHashMap,etc.
5
L’interface Collection
 Principales méthodes
 int size()
 boolean isEmpty
 boolean add(Object o)
 boolean remove(Object o)
 boolean contains(Object o)
 void clear()
 Iterator iterator()
 Exemples de classes l’implémentant
 ArrayList, LinkedList : différents types de liste
 TreeSet, HashSet : différents types d’ensemble
6
L’interface Iterator
 Spécifie les caractéristiques d’un « itérateur »
 Énumère les éléments d’une collection
 Pour écrire une itération
 Parcours dans un seul sens
 Disponible pour toute collection
 Via la méthode iterator() imposée par l’interface Collection
 Principales méthodes d’un itérateur
 Boolean hasNext()
 Object next() throws NoSuchElementException
 L’exception (éventuellement) lancée dérive de
RuntimeException
7
public interface Iterable<T> {
Iterator<T> iterator();
}
Utilisation d’itérateur
 Exécution :
// Exemple de parcours d'une collection
public static void main(String[] args) {
Collection collection = new HashSet();
collection.add("un");
collection.add("deux");
collection.add("trois");
Iterator it = collection.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
8
Utilisation implicite d’itérateur
 Utilisation du « for each »
 Fonctionne pour tous les objets implémentant l’interface
Iterable (en particulier les collections)
Collection collection = new HashSet();
collection.add("un");
collection.add("deux");
collection.add("trois");
//Iterator it = collection.iterator();
for (Object o : collection) { //foreach
System.out.println(o.getClass() + " - " + o);
}
9
L’interface List
 Spécifie les caractéristiques d’une liste
 Suite de données ordonnées (et indexées à partir de 0)
 Pouvant contenir des doublons
 Principales méthodes (en + de celles imposées par
Collection)
 void add(int index, Object o)
 Object get(int index)
 Object remove(int index)
 Int indexOf(Object o)
 Exemple de classes l’implémentant
 ArrayList : liste dans un tableau, accès rapide
 LinkedList : liste chaînée, insertion rapide
10
L’interface List : Exemple (1/2)
//Une Liste de collection du type String
List<String> myArray = new ArrayList<String>();
myArray.add("un");
myArray.add("deux");
myArray.add("trois");
for (int i = 0; i < myArray.size(); i++) {
System.out.println(myArray.get(i));
}
Résultat :
un
deux
trois
11
L’interface List : Exemple (2/2)
List<String> list = new ArrayList<>();
// ou List list = new LinkedList();
list.add(0, "Dimanche");
list.add(1, "Lundi");
list.add(2, "Mardi");
list.add(3, "Mercredi");
list.add(4, "Jeudi");
list.add(5, "Vendredi");
list.add(6, "Samedi");
(2)
// foreach
for (Object o : list) {
System.out.println(o);
}
(1)
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
12
L’interface set
 Spécifie les caractéristiques d’un ensemble
 Ensemble de données non ordonnées
 Sans doublons
 Principales méthodes
 Celles de collection
 Exemples de classes l’implémentant
 HashSet : temps constant pour les opérations de base
 TreeSet : éléments rangés selon leur ordre naturel
13
L’interface Map
 Spécifie les caractéristiques d’un « dictionnaire »
 Ensemble de couples (clé, valeur)
 Clés uniques, Couples non ordonnés
 Principales méthodes
 Object put(Object key, Object value)
 boolean containsKey(Object key)
 Object get(Object key)
 Set keySet()
 Collection values()
 Exemples de classes l’implémentant
 HashMap, TreeMap
14
L’interface Map : exemple
Map map = new HashMap();
map.put("OS", "Windows");
map.put("langage1", "Java");
map.put("langage2", "Java ee");
map.put("langage3", "Android");
map.put(null, null);
Set set = map.keySet(); //keyset retourne les clés
(2)
Iterator it = set.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
(1)
for (Object o : set) {
System.out.println(o);
}
Résultat :
15
Algorithmes fournis
 D’autres algorithmes de la classe Collections
 min(l), max(l), sort(l), reverse(l), shuffle(l) …
List list = new LinkedList();
list.add(0, "Dimanche");
list.add(1, "Lundi");
list.add(2, "Mardi");
list.add(3, "Mercredi");
list.add(4, "Jeudi");
list.add(5, "Vendredi");
list.add(6, "Samedi");
//Recherche dans une liste
int index = Collections.binarySearch(list, "Vendredi");
System.out.println("Index = " + index);
16
Exemple : tri d’une liste
List l = new ArrayList();
l.add(2);
l.add(3);
l.add(1);
for (Object o : l) {
System.out.println(o);
}
Collections.sort(l);
for (Object o : l) {
System.out.println(o);
}
17
Opérations dans une collection ArrayList
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("Dimanche");
arrayList.add("Lundi");
arrayList.add("Mardi");
//Trouver l’indice d’une vlaur dans un ArrayList
System.out.println(arrayList.indexOf("Mardi"));
//true si la valeur existe
System.out.println(arrayList.contains("Mardi"));
// Remplacer Lundi par Bonjour
System.out.println(arrayList.set(1, "Bonjour"));
//Retourner false, la valeur Lundi n'existe plus
System.out.println(arrayList.contains("Lundi"));
18
Opérations dans une collection HashMap
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("nom", "IDRISSI");
hashMap.put("prenom", "Youness");
hashMap.put("fonction", "Professeur d'Enseignement Seuperieur");
hashMap.put("ville", "Fès");
//Trouver un objet par clé dans un HashMap
System.out.println(hashMap.get("nom"));
//true si la valeur existe
System.out.println(hashMap.containsValue("Fès"));
//true si la clé existe
System.out.println(hashMap.containsKey("ville"));
//Supprimer une clé
hashMap.remove("ville");
//retourner false après supression
System.out.println(hashMap.containsValue("Fès"));
19
Stack vs Queue
20
 Stack : LIFO
 Queue : FIFO
 [1, 2, 3]
 Queue (qu.poll();) => [2, 3]
 Stack (stack.pop();) => [1, 2]
queue.offer(el);
stack.push(el);
queue.poll();
stack.pop();
Stack vs Queue
21
Queue<Integer> qu = new PriorityQueue<Integer>();
qu.offer(1);
qu.offer(2);
qu.offer(3);
System.out.println(qu);
qu.poll(); System.out.println("Queue => " + qu);
qu.poll(); System.out.println("Queue => " + qu);
qu.poll(); System.out.println("Queue => " + qu);
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack);
stack.pop(); System.out.println("Stack => " + stack);
stack.pop(); System.out.println("Stack => " + stack);
stack.pop(); System.out.println("Stack => " + stack);
Résultat :
[1, 2, 3]
Queue => [2, 3]
Queue => [3]
Queue => []
[1, 2, 3]
Stack => [1, 2]
Stack => [1]
Stack => []

More Related Content

Similar to 5- understandinggJava_Collections_v4.pdf

Stockage des objets
Stockage des objetsStockage des objets
Stockage des objetsakounda
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinterRYMAA
 
Héritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfHéritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfAabidiHafid
 
Classes et Objets.pdf
Classes et Objets.pdfClasses et Objets.pdf
Classes et Objets.pdfAabidiHafid
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Normandy JUG
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de javaAmir Souissi
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniShellmates
 
WTF - What's The Fold - Bordeaux JUG 2013
WTF - What's The Fold - Bordeaux JUG 2013WTF - What's The Fold - Bordeaux JUG 2013
WTF - What's The Fold - Bordeaux JUG 2013Zenika
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scalaSOAT
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage CMohamed Lahby
 
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxTarikElMahtouchi1
 
06 visual basic .net - les structures de donnees, les enumerations de constan...
06 visual basic .net - les structures de donnees, les enumerations de constan...06 visual basic .net - les structures de donnees, les enumerations de constan...
06 visual basic .net - les structures de donnees, les enumerations de constan...Hamza SAID
 

Similar to 5- understandinggJava_Collections_v4.pdf (20)

POO-JAVA-partie-2.pdf
POO-JAVA-partie-2.pdfPOO-JAVA-partie-2.pdf
POO-JAVA-partie-2.pdf
 
Stockage des objets
Stockage des objetsStockage des objets
Stockage des objets
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
 
Héritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdfHéritage et Polymorphisme .pdf
Héritage et Polymorphisme .pdf
 
Classes et Objets.pdf
Classes et Objets.pdfClasses et Objets.pdf
Classes et Objets.pdf
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
 
WTF - What's The Fold - Bordeaux JUG 2013
WTF - What's The Fold - Bordeaux JUG 2013WTF - What's The Fold - Bordeaux JUG 2013
WTF - What's The Fold - Bordeaux JUG 2013
 
Structures donneenew
Structures donneenewStructures donneenew
Structures donneenew
 
Structures donnee
Structures donneeStructures donnee
Structures donnee
 
NIO 2
NIO 2NIO 2
NIO 2
 
Theme 9
Theme 9Theme 9
Theme 9
 
JAVA Chapitre7
JAVA Chapitre7JAVA Chapitre7
JAVA Chapitre7
 
Introduction à scala
Introduction à scalaIntroduction à scala
Introduction à scala
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage C
 
Memo java
Memo javaMemo java
Memo java
 
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptxfdocuments.fr_chap-03-poo-en-java-partie1.pptx
fdocuments.fr_chap-03-poo-en-java-partie1.pptx
 
06 visual basic .net - les structures de donnees, les enumerations de constan...
06 visual basic .net - les structures de donnees, les enumerations de constan...06 visual basic .net - les structures de donnees, les enumerations de constan...
06 visual basic .net - les structures de donnees, les enumerations de constan...
 

Recently uploaded

firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirstjob4
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestionyakinekaidouchi1
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Ville de Châteauguay
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...Institut de l'Elevage - Idele
 
GAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesGAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesInstitut de l'Elevage - Idele
 
GAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéGAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéInstitut de l'Elevage - Idele
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...Institut de l'Elevage - Idele
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de planchermansouriahlam
 
optimisation logistique MLT_231102_155827.pdf
optimisation logistique  MLT_231102_155827.pdfoptimisation logistique  MLT_231102_155827.pdf
optimisation logistique MLT_231102_155827.pdfSoukainaMounawir
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageInstitut de l'Elevage - Idele
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...Institut de l'Elevage - Idele
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusInstitut de l'Elevage - Idele
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...Institut de l'Elevage - Idele
 
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...Institut de l'Elevage - Idele
 

Recently uploaded (15)

firefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdffirefly algoriyhm sac a dos step by step .pdf
firefly algoriyhm sac a dos step by step .pdf
 
comprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestioncomprehension de DDMRP dans le domaine de gestion
comprehension de DDMRP dans le domaine de gestion
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
GAL2024 - Consommations et productions d'énergies dans les exploitations lait...
 
GAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentesGAL2024 - Changements climatiques et maladies émergentes
GAL2024 - Changements climatiques et maladies émergentes
 
GAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversitéGAL2024 - L'élevage laitier cultive la biodiversité
GAL2024 - L'élevage laitier cultive la biodiversité
 
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
GAL2024 - Méthane 2030 : une démarche collective française à destination de t...
 
conception d'un batiment r+4 comparative de defferente ariante de plancher
conception d'un  batiment  r+4 comparative de defferente ariante de plancherconception d'un  batiment  r+4 comparative de defferente ariante de plancher
conception d'un batiment r+4 comparative de defferente ariante de plancher
 
optimisation logistique MLT_231102_155827.pdf
optimisation logistique  MLT_231102_155827.pdfoptimisation logistique  MLT_231102_155827.pdf
optimisation logistique MLT_231102_155827.pdf
 
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engageGAL2024 - Décarbonation du secteur laitier : la filière s'engage
GAL2024 - Décarbonation du secteur laitier : la filière s'engage
 
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
GAL2024 - Parcellaire des fermes laitières : en enjeu de compétitivité et de ...
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenusGAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
GAL2024 - Situation laitière 2023-2024 : consommation, marchés, prix et revenus
 
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
GAL2024 - Renouvellement des actifs : un enjeu pour la filière laitière franç...
 
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
GAL2024 - Traite des vaches laitières : au coeur des stratégies d'évolution d...
 

5- understandinggJava_Collections_v4.pdf

  • 2. Les collections en Java À quoi servent les collections ?  Stocker les données  Autrement que dans de simples tableaux des structures de tailles dynamique des structures adaptées au besoin  Sans réinventer la roue  Gagner du temps et de l’énergie  Bénéficier de classes robustes et performantes  Fournies par Java en standard  Dans le package java.util Plus de détails, plus de documentation, visitez les sites ci-dessous : https://docs.oracle.com/javase/8/docs/api/java/util/package-summary.html 2
  • 3. Le package java.util 3  Plus de détails, plus de documentation, visitez les sites ci-dessous :  https://docs.oracle.com/javase/7/docs/api/java/util/package-summary.html  https://docs.oracle.com/javase/8/docs/api/java/util/package-summary.html I I I I I I I
  • 4. « List-Set-Map » dans java.util Map HashMap HashTable SorteMap TreeMap extends implements implements implements Collection Set List ArrayList extends implements extends HashSet implements 4
  • 5. Table de comparaison (List-Set-Map) List Set Map Duplication List permet les éléments en double.N’importe quel nombre d’éléments en double peut être inséré dans la liste sans affecter les mêmes valeurs existantes et leurs index. Set n’autorise pas les doublons.Set et toutes les classes qui implémentent l’interface Set doivent avoir des éléments uniques. Map stocke les éléments sous forme de paire clé/valeur. Map n’autorise pas les clés en double, mais les valeurs en double. Valeurs nulles List autorise n’importe quel nombre de valeurs NULL. Set autorise au plus une valeur NULL unique. Map peut avoir au plus une clé NULL unique et un nombre quelconque de valeurs NULL. Ordre List et toutes ses classes d’implémentation conservent l’ordre d’insertion. Set ne maintient aucun ordre; encore peu de ses classes trient les éléments dans un ordre tel que LinkedHashSet conserve les éléments dans l’ordre d’insertion. Pareil à Set, Map ne stocke pas non plus les éléments dans un ordre, mais peu de ses classes font de même. Par exempleTreeMap trie la map dans l’ordre croissant des clés et LinkedHashMap trie les éléments dans l’ordre d’insertion, l’ordre dans lequel ils ont été ajoutés à LinkedHashMap. Les classes utilisés ArrayList, LinkedList etc. HashSet,LinkedHashSet, TreeSet,SortedSet etc. HashMap,TreeMap,WeakHashMap, LinkedHashMap,IdentityHashMap,etc. 5
  • 6. L’interface Collection  Principales méthodes  int size()  boolean isEmpty  boolean add(Object o)  boolean remove(Object o)  boolean contains(Object o)  void clear()  Iterator iterator()  Exemples de classes l’implémentant  ArrayList, LinkedList : différents types de liste  TreeSet, HashSet : différents types d’ensemble 6
  • 7. L’interface Iterator  Spécifie les caractéristiques d’un « itérateur »  Énumère les éléments d’une collection  Pour écrire une itération  Parcours dans un seul sens  Disponible pour toute collection  Via la méthode iterator() imposée par l’interface Collection  Principales méthodes d’un itérateur  Boolean hasNext()  Object next() throws NoSuchElementException  L’exception (éventuellement) lancée dérive de RuntimeException 7 public interface Iterable<T> { Iterator<T> iterator(); }
  • 8. Utilisation d’itérateur  Exécution : // Exemple de parcours d'une collection public static void main(String[] args) { Collection collection = new HashSet(); collection.add("un"); collection.add("deux"); collection.add("trois"); Iterator it = collection.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } 8
  • 9. Utilisation implicite d’itérateur  Utilisation du « for each »  Fonctionne pour tous les objets implémentant l’interface Iterable (en particulier les collections) Collection collection = new HashSet(); collection.add("un"); collection.add("deux"); collection.add("trois"); //Iterator it = collection.iterator(); for (Object o : collection) { //foreach System.out.println(o.getClass() + " - " + o); } 9
  • 10. L’interface List  Spécifie les caractéristiques d’une liste  Suite de données ordonnées (et indexées à partir de 0)  Pouvant contenir des doublons  Principales méthodes (en + de celles imposées par Collection)  void add(int index, Object o)  Object get(int index)  Object remove(int index)  Int indexOf(Object o)  Exemple de classes l’implémentant  ArrayList : liste dans un tableau, accès rapide  LinkedList : liste chaînée, insertion rapide 10
  • 11. L’interface List : Exemple (1/2) //Une Liste de collection du type String List<String> myArray = new ArrayList<String>(); myArray.add("un"); myArray.add("deux"); myArray.add("trois"); for (int i = 0; i < myArray.size(); i++) { System.out.println(myArray.get(i)); } Résultat : un deux trois 11
  • 12. L’interface List : Exemple (2/2) List<String> list = new ArrayList<>(); // ou List list = new LinkedList(); list.add(0, "Dimanche"); list.add(1, "Lundi"); list.add(2, "Mardi"); list.add(3, "Mercredi"); list.add(4, "Jeudi"); list.add(5, "Vendredi"); list.add(6, "Samedi"); (2) // foreach for (Object o : list) { System.out.println(o); } (1) Iterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } 12
  • 13. L’interface set  Spécifie les caractéristiques d’un ensemble  Ensemble de données non ordonnées  Sans doublons  Principales méthodes  Celles de collection  Exemples de classes l’implémentant  HashSet : temps constant pour les opérations de base  TreeSet : éléments rangés selon leur ordre naturel 13
  • 14. L’interface Map  Spécifie les caractéristiques d’un « dictionnaire »  Ensemble de couples (clé, valeur)  Clés uniques, Couples non ordonnés  Principales méthodes  Object put(Object key, Object value)  boolean containsKey(Object key)  Object get(Object key)  Set keySet()  Collection values()  Exemples de classes l’implémentant  HashMap, TreeMap 14
  • 15. L’interface Map : exemple Map map = new HashMap(); map.put("OS", "Windows"); map.put("langage1", "Java"); map.put("langage2", "Java ee"); map.put("langage3", "Android"); map.put(null, null); Set set = map.keySet(); //keyset retourne les clés (2) Iterator it = set.iterator(); while (it.hasNext()){ System.out.println(it.next()); } (1) for (Object o : set) { System.out.println(o); } Résultat : 15
  • 16. Algorithmes fournis  D’autres algorithmes de la classe Collections  min(l), max(l), sort(l), reverse(l), shuffle(l) … List list = new LinkedList(); list.add(0, "Dimanche"); list.add(1, "Lundi"); list.add(2, "Mardi"); list.add(3, "Mercredi"); list.add(4, "Jeudi"); list.add(5, "Vendredi"); list.add(6, "Samedi"); //Recherche dans une liste int index = Collections.binarySearch(list, "Vendredi"); System.out.println("Index = " + index); 16
  • 17. Exemple : tri d’une liste List l = new ArrayList(); l.add(2); l.add(3); l.add(1); for (Object o : l) { System.out.println(o); } Collections.sort(l); for (Object o : l) { System.out.println(o); } 17
  • 18. Opérations dans une collection ArrayList ArrayList<String> arrayList = new ArrayList<String>(); arrayList.add("Dimanche"); arrayList.add("Lundi"); arrayList.add("Mardi"); //Trouver l’indice d’une vlaur dans un ArrayList System.out.println(arrayList.indexOf("Mardi")); //true si la valeur existe System.out.println(arrayList.contains("Mardi")); // Remplacer Lundi par Bonjour System.out.println(arrayList.set(1, "Bonjour")); //Retourner false, la valeur Lundi n'existe plus System.out.println(arrayList.contains("Lundi")); 18
  • 19. Opérations dans une collection HashMap HashMap<String, String> hashMap = new HashMap<>(); hashMap.put("nom", "IDRISSI"); hashMap.put("prenom", "Youness"); hashMap.put("fonction", "Professeur d'Enseignement Seuperieur"); hashMap.put("ville", "Fès"); //Trouver un objet par clé dans un HashMap System.out.println(hashMap.get("nom")); //true si la valeur existe System.out.println(hashMap.containsValue("Fès")); //true si la clé existe System.out.println(hashMap.containsKey("ville")); //Supprimer une clé hashMap.remove("ville"); //retourner false après supression System.out.println(hashMap.containsValue("Fès")); 19
  • 20. Stack vs Queue 20  Stack : LIFO  Queue : FIFO  [1, 2, 3]  Queue (qu.poll();) => [2, 3]  Stack (stack.pop();) => [1, 2] queue.offer(el); stack.push(el); queue.poll(); stack.pop();
  • 21. Stack vs Queue 21 Queue<Integer> qu = new PriorityQueue<Integer>(); qu.offer(1); qu.offer(2); qu.offer(3); System.out.println(qu); qu.poll(); System.out.println("Queue => " + qu); qu.poll(); System.out.println("Queue => " + qu); qu.poll(); System.out.println("Queue => " + qu); Stack<Integer> stack = new Stack<>(); stack.push(1); stack.push(2); stack.push(3); System.out.println(stack); stack.pop(); System.out.println("Stack => " + stack); stack.pop(); System.out.println("Stack => " + stack); stack.pop(); System.out.println("Stack => " + stack); Résultat : [1, 2, 3] Queue => [2, 3] Queue => [3] Queue => [] [1, 2, 3] Stack => [1, 2] Stack => [1] Stack => []