Académique Documents
Professionnel Documents
Culture Documents
Cours Java Collection
Cours Java Collection
Achref El Mouelhi
elmouelhi.achref@gmail.com
Java
I c
Les collections, c’est quoi ?
ELH
U
sont des objets
L MO
f E
hre
permettent de regrouper et gérer plusieurs objets
c
c A
Java
I c
ELH
U
L MO
f E
chre
c A
Java
Java
h
Queue : collection
c e
grérée comme une file d’attente (FIFO : First In
First Out) A
c
Java
h
Queue : collection
c e
grérée comme une file d’attente (FIFO : First In
First Out) A
c
Java
List
I c
ELH
U
L MO
f E
c hre
c A
ArrayList LinkedList Vector
Java
I c
ArrayList
ELH
U
Pas de limite de taille
L MO
f E
hre
Possibilité de stocker tout type de données (y compris null)
c
c A
Java
Pour créer un ArrayList
ArrayList list = new ArrayList();
I c
ELH
U
L MO
f E
chre
c A
Java
Pour créer un ArrayList
ArrayList list = new ArrayList();
Java
Pour créer un ArrayList
ArrayList list = new ArrayList();
Java
Pour créer un ArrayList
ArrayList list = new ArrayList();
import java.util.ArrayList;
import java.util.ArrayList;
Java
Autres méthodes de ArrayList
c
set(index, object) h r e
: remplace la valeur de l’élément d’indice index de la
c A
liste par object
isEmpty() : retourne true si la liste est vide, false sinon.
...
Java
Qu’affiche le programme suivant ?
import java.util.ArrayList;
Java
Qu’affiche le programme suivant ?
import java.util.ArrayList;
0 bonsoir
H & H: Research and Training 11 / 50
List ArrayList
Java
Exercice
c
4 affiche la nouvelle liste (après suppression de la valeur
demandée)
Java
Exercice
c A
supprime toutes
4 affiche la nouvelle liste (après suppression de la valeur
demandée)
Java
Exercice
E L
positifs de son choix, il s’arrête à saisie de zéro
2
h refde saisir une valeur
demande à l’utilisateur
c
3 affiche
A (de toutes les occurrences) de cette valeur
cles positions
dans cette liste
Java
Considérons le programme suivant
public class Main {
public static void main(String[] args) {
ArrayList liste = new ArrayList();
liste.add(0);
liste.add(1);
I c
liste.add(2);
liste.add(3);
ELH
for(Object elt: liste) {
U
if (elt.equals(0))
L MO
liste.remove(elt);
f E
hre
}
}
c
c A
}
Java
Considérons le programme suivant
public class Main {
public static void main(String[] args) {
ArrayList liste = new ArrayList();
liste.add(0);
liste.add(1);
I c
liste.add(2);
liste.add(3);
ELH
for(Object elt: liste) {
U
if (elt.equals(0))
L MO
liste.remove(elt);
f E
hre
}
}
c
c A
}
Le résultat est l’exception suivante
Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.ArrayList$Itr.checkForComodification(
ArrayList.java:1009)
at java.base/java.util.ArrayList$Itr.next(ArrayList.java:963)
at org.eclipse.test.Main.main(Main.java:15)
Java
package org.eclipse.classes;
import java.util.ArrayList;
import java.util.ListIterator;
Java
r
Pour le premier élément,e f E
l’élément précédent vaut null
A h
célément, l’élément suivant vaut null
c
Pour le dernier
Java
Exemple avec LinkedList
import java.util.LinkedList;
Java
Java
Java
Java
Qu’affiche le programme suivant ?
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
LinkedList l = new LinkedList();
l.add(0);
l.add("bonjour");
I c
l.addFirst("premier");
ELH
l.addLast("dernier");
U
String s = "Salut";
l.add(s);
L MO
f E
hre
int value = 2;
l.add(value);
c
c A
l.remove("dernier");
l.remove(s);
l.remove((Object)value);
ListIterator li = l.listIterator();
while(li.hasNext())
System.out.print(li.next() + " ");
}
}
Java
Qu’affiche le programme suivant ?
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
LinkedList l = new LinkedList();
l.add(0);
l.add("bonjour");
I c
l.addFirst("premier");
ELH
l.addLast("dernier");
U
String s = "Salut";
l.add(s);
L MO
f E
hre
int value = 2;
l.add(value);
c
c A
l.remove("dernier");
l.remove(s);
l.remove((Object)value);
ListIterator li = l.listIterator();
while(li.hasNext())
System.out.print(li.next() + " ");
}
}
premier 0 bonjour
H & H: Research and Training 22 / 50
List Généricité et construction d’une liste
Java
I c
ELH
U
L MO
f E
chre
c A
Java
I c
ELH
U
Ou
L MO
f E
List<Integer> liste = new LinkedList<Integer>();
chre
c A
Java
I c
ELH
U
Ou
L MO
f E
List<Integer> liste = new LinkedList<Integer>();
A c hre
c
La même chose pour ArrayList
List<Integer> liste = new ArrayList<Integer>();
Java
I c
EL H
Pour convertir le tableau tab en liste
OU
L M
List<Integer> liste = new
r e f ELinkedList(Arrays.asList(tab));
A ch
c
Java
I c
EL H
Pour convertir le tableau tab en liste
OU
L M
List<Integer> liste = new
r e f ELinkedList(Arrays.asList(tab));
A ch
c
Ou en plus simple
List<Integer> ent = Arrays.asList(tab);
Java
Java
Java
A c
c
Java
A c
Solution
c
liste.remove(liste.subList(0,liste.lastIndexOf(2)).
lastIndexOf(2));
Java
Set
I c
ELH
U
L MO
f E
c hre
c A
HashSet TreeSet LinkedHashSet
Java
HashSet
I
c
Collection utilisant une table de hachage EL H
M OU
f E L
Possibilité de parcourir ce type de collection avec un objet
Iterator
c h re
c A de cet objet un tableau d’Object
Possibilité d’extraire
import java.util.HashSet;
import java.util.Iterator;
import java.util.HashSet;
import java.util.Iterator;
Java
Les éléments ne sont pas ordonnés
I
c
conteneur.
EL H
Cette valeur de hachage détermine l’indice de l’élément dans un tableau
O U
Ainsi, l’ordre des éléments insérésM
fE L n’est naturellement pas conservé.
h r e
c reste coûteux en espace).
Ceci permet d’accéder aux éléments souhaités avec une complexité
c
O(1) en temps
A (mais
Java
Les éléments ne sont pas ordonnés
I
c
conteneur.
EL H
Cette valeur de hachage détermine l’indice de l’élément dans un tableau
O U
Ainsi, l’ordre des éléments insérésM
fE L n’est naturellement pas conservé.
h r e
c reste coûteux en espace).
Ceci permet d’accéder aux éléments souhaités avec une complexité
c
O(1) en temps
A (mais
Remarque
Java
HashSet : exemple avec conversion en tableau
public class Main {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add("bonjour");
I c
hs.add(69);
hs.add(’c’);
ELH
U
MO
Object[] obj = hs.toArray();
for(Object o : obj)
System.out.println(o);
f E L
}
chre
c A
}
Java
HashSet : exemple avec conversion en tableau
public class Main {
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add("bonjour");
I c
hs.add(69);
hs.add(’c’);
ELH
U
MO
Object[] obj = hs.toArray();
for(Object o : obj)
System.out.println(o);
f E L
}
chre
c A
}
Le résultat
c
69
bonjour
Java
Exemple avec LinkedHashSet
public class Main {
public static void main(String[] args) {
LinkedHashSet hs = new LinkedHashSet();
hs.add("bonjour");
I c
hs.add(69);
hs.add(’c’);
ELH
U
MO
Object[] obj = hs.toArray();
for(Object o : obj)
System.out.println(o);
f E L
}
chre
c A
}
Java
Exemple avec LinkedHashSet
public class Main {
public static void main(String[] args) {
LinkedHashSet hs = new LinkedHashSet();
hs.add("bonjour");
I c
hs.add(69);
hs.add(’c’);
ELH
U
MO
Object[] obj = hs.toArray();
for(Object o : obj)
System.out.println(o);
f E L
}
chre
c A
}
Ordre d’affichage = ordre d’insertion
bonjour
69
c
Java
I
c
TreeSet
H
ELavec un objet
U
MO
Possibilité de parcourir ce type de collection
Iterator
L
fésEsont automatiquement triés
h r e
Les éléments enregistr
c
c A
Java
Exemple avec TreeSet
public class Main {
public static void main(String[] args) {
TreeSet ts = new TreeSet();
ts.add(5);
ts.add(8);
I c
ts.add(2);
ELH
Iterator it = ts.iterator(); U
while(it.hasNext())
L MO
f
System.out.println(it.next());
E
}
chre
c A
}
Java
Exemple avec TreeSet
public class Main {
public static void main(String[] args) {
TreeSet ts = new TreeSet();
ts.add(5);
ts.add(8);
I c
ts.add(2);
ELH
Iterator it = ts.iterator(); U
while(it.hasNext())
L MO
f
System.out.println(it.next());
E
}
chre
c A
}
Le résultat est ordonné
2
5
8
Java
I c
Les éléments ne sont pas ordonnés
ELH
U
L MO
TreeSet ordonne les données insérées.
h r e fE
Elle n’accepte qu’un seul type.
A c
c
Java
Map
I c
ELH
U
L MO
f E
chre
c A
Hashtable HashMap TreeMap WeakHashMap
Java
Hashtable
I c
H
Hashtable fonctionne avec un couple (clé,valeur)
EL
Elle utilise une table de hachage
O U
L M
f
Elle n’accepte pas la valeur
r e E null
A
La clé doit être h
cunique
c
Pour la parcourir, on utilise l’objet Enumeration
Java
Exemple avec Hashtable
public class Main {
public static void main(String[] args) {
Hashtable ht = new Hashtable();
ht.put(1, "Java");
ht.put(2, "PHP");
I c
ht.put(10, "C++");
ht.put(17, "Pascal");
ELH
Enumeration e = ht.elements();
U
while(e.hasMoreElements())
L MO
E
System.out.println(e.nextElement());
f
hre
}
}
c
c A
Java
Exemple avec Hashtable
public class Main {
public static void main(String[] args) {
Hashtable ht = new Hashtable();
ht.put(1, "Java");
ht.put(2, "PHP");
I c
ht.put(10, "C++");
ht.put(17, "Pascal");
ELH
Enumeration e = ht.elements();
U
while(e.hasMoreElements())
L MO
E
System.out.println(e.nextElement());
f
hre
}
}
c
c A
Le résultat
C++
Pascal
PHP
Java
Java
put ajoute si la clé n’existe pas, modifie sinon.
public class Main {
public static void main(String[] args) {
Hashtable ht = new Hashtable();
ht.put(1, "Java");
ht.put(2, "PHP");
ht.put(10, "C++");
I c
ht.put(17, "Pascal");
ELH
ht.put(17, "Cobol");
U
Enumeration e = ht.elements();
while(e.hasMoreElements())
L MO
f E
hre
System.out.println(e.nextElement());
}
c
c A
}
Java
put ajoute si la clé n’existe pas, modifie sinon.
public class Main {
public static void main(String[] args) {
Hashtable ht = new Hashtable();
ht.put(1, "Java");
ht.put(2, "PHP");
ht.put(10, "C++");
I c
ht.put(17, "Pascal");
ELH
ht.put(17, "Cobol");
U
Enumeration e = ht.elements();
while(e.hasMoreElements())
L MO
f E
hre
System.out.println(e.nextElement());
}
c
c A
}
Le résultat
C++
Cobol
PHP
Java
H & H: Research and Training 39 / 50
Map Hashtable
Java
c
isEmpty() retourne true si l’objet est vide, false sinon.
I
E
contains(value) retourne true si la valeurH
L existe dans la
U
Hashtable, false sinon.
L MO
e f E true si la clé existe dans la
containsKey(key) retourne
h r
A c
Hashtable, false sinon.
c
elements() retourne une énumération des éléments de l’objet
keys() retourne la liste des clés sous forme d’énumération
Java
HashMap
I c
H
HashMap fonctionne aussi avec un couple (clé,valeur)
L
Elle utilise aussi une table de hachageUE
M O
HashMap accepte la valeur
f L
Enull
h r e
cunique
c A
La clé doit être
Pour la parcourir, on utilise un objet Set
Java
Exemple avec HashMap
package org.eclipse.classes;
import java.util.HashMap;
import java.util.Set;
I c
LH
{E
public class Main {
U
OHashMap();
public static void main(String[] args)
HashMap<Integer, String> hm =M
E L new
hm.put(10, A c h
"C++");
c
hm.put(17, null);
Set s = hm.entrySet();
Iterator it = s.iterator();
while(it.hasNext())
System.out.println(it.next());
}
}
Java
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
I c
HashMap<Integer, String> hm = new HashMap();
ELH
hm.put(1, "Java");
U
hm.put(2, "PHP");
L MO
hm.put(10, "C++");
f E
hre
hm.put(17, null);
c
c A
for (Entry<Integer, String> entry : hm.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue
());
}
}
}
Java
Étant donné ce dictionnaire
HashMap<String, Integer> repetition = new HashMap();
repetition.put("Java",2);
repetition.put("PHP",5);
I c
repetition.put("C++",1);
ELH
repetition.put("HTML",4);
U
L MO
f E
Exercice
chre
c A
Écrire un programme Java qui permet de répéter l’affichage de chaque
clé de ce dictionnaire selon la valeur associée
Java
Exercice 2 : Étant donnée la liste suivante :
List list = Arrays.asList(2,5,"Bonjour",true,’c’,"3"
,"b",false,10);
I
c
E
Écrire un programme Java qui permet de stocker H
L dans un
dictionnaire (Map) les types contenusO U
dans la liste list ainsi que
le nombre d’éléments de cetteL Mappartenant
re f E liste à chaque type.
c h
c A:
Résultat attendu
Integer=3
Character=1
String=3
Boolean=2
Java
Java
Pour créer une entrée, on utilise la méthode entry()
var x = Map.entry(3, "JavaScript");
I c
ELH
U
L MO
f E
chre
c A
Java
Pour créer une entrée, on utilise la méthode entry()
var x = Map.entry(3, "JavaScript");
I c
Pour créer une Map en utilisant plusieurs entrées prédéfinies
E L H
var x = Map.entry(3, "JavaScript");
O U
var z = Map.entry(1, "CSS"); L M
var y = Map.entry(2, "HTML");
h r e f= E
A c
Map<Integer, String> map Map.ofEntries(x,y,z);
Java
Pour créer une entrée, on utilise la méthode entry()
var x = Map.entry(3, "JavaScript");
I c
Pour créer une Map en utilisant plusieurs entrées prédéfinies
E L H
var x = Map.entry(3, "JavaScript");
O U
var z = Map.entry(1, "CSS"); L M
var y = Map.entry(2, "HTML");
h r e f= E
A c
Map<Integer, String> map Map.ofEntries(x,y,z);
c
Pour afficher
for (Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
c
System.out.println(entry.getKey() + " " + entry.getValue());
I
}
ELH
U
L MO
f E
chre
c A
c
System.out.println(entry.getKey() + " " + entry.getValue());
I
}
ELH
U
L MO
f E
Pour créer une HashMap et l’initialiser en utilisant la méthode of
re map = new3,HashMap(Map.of(
c h
HashMap<Integer, String>
c A "JavaScript",
2, "HTML",
1, "CSS")
);
Java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
System.out.println(lettres);
List<String> sub = lettres.subList(1, 2); // extraire une sous-
liste
System.out.println(sub);
Collections.reverse(sub); // pour trier la liste dans le sens
decroissant
System.out.println(sub);
}
}
H & H: Research and Training 49 / 50
Remarques
Java
ArrayList vs LinkedList
Java
ArrayList vs LinkedList
List accepte les doublons permet l’accès à un élément via son indice et les
éléments sont insérés dans l’ordre (pas forcément triés)