Vous êtes sur la page 1sur 28

Collections

• LES COLLECTIONS
• LES INTERFACES: PRÉSENTATION GÉNÉRALE
• DESCRIPTION DES INTERFACES DU FRAMEWORK
• LES ENSEMBLES INTERFACE SET<E>
• LES LISTES (SÉQUENCE) INTERFACE LIST<E>
• LES FILES INTERFACE QUEUE<E>
• LES TABLEAUX ASSOCIATIFS MAP<E>

DR. YOUSSEF ELMIR ELMIR@ESTIN.DZ


LES COLLECTIONS
18

LES
COLLECTIONS

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
19

 LES COLLECTIONS

 Une collection, aussi appelée conteneur, est un objet qui regroupe


d’autres objets appelés éléments.

 Elle est utilisée pour stocker, rechercher, manipuler et communiquer des


données regroupées.

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
20

 LES COLLECTIONS

 Le cadre de collections Java (Java Collections Framework JCF) est une


architecture unifiée qui sert à représenter et manipuler des collections.

 Il contient des interfaces, des implémentations et des algorithmes

 Les avantages de son utilisation sont nombreux:


• Réduire l’effort de programmation
• Augmenter la rapidité et la qualité du programme
• Permet une interopérabilité entre les API
• Réduire l’effort d’apprendre des API
• Réduire l’effort de créer des API
• Encourager la réutilisation

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
21

 LES COLLECTIONS

 Ce cadre définit:

• Des interfaces: qui représentent les collections

• Des classes abstraites: qui implantent les méthodes de base communes aux
interfaces.

• Des réalisations (implémentations) : réalisations concrètes des interfaces en


s’appuyant sur différentes solutions pour stocker les éléments (tableau, structures
chaînées, table de hachage, arbre, etc.).

• Des algorithmes : algorithmes classiques (chercher, trier, etc.) polymorphes


(fonctionnent avec plusieurs collections)

• Un protocole d’itération : pour parcourir une collection du début à la fin.

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
22

LES INTERFACES:
PRÉSENTATION
GÉNÉRALE

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
23

 1. LES INTERFACES: PRÉSENTATION GÉNÉRALE

 Les interfaces permettent de manipuler les collections indépendamment


des détails de leur implémentation.

 Deux interfaces principales: Collection et Map

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
24
 1. LES INTERFACES: PRÉSENTATION GÉNÉRALE

 Collection : C’est la racine de la hiérarchie. Elle est utilisée pour manipuler des
collections avec un degré de généralité maximal. Le JCF ne fournit aucune
implémentation directe de cette interface mais fournit des implémentations pour des
sous-interface spécifiques.

• Set : C’est une collection qui ne peut pas contenir des éléments dupliqués. Elle
modélise l’ensemble au sens mathématique du terme.

• SortedSet : Un Set qui maintient ses éléments ordonnés de manière ascendante

• List : C’est une collection qui peut contenir des éléments dupliqués. Son utilisateur
connait en général l’emplacement des éléments et peut y accéder en indiquant
leurs positions (indice entier) comme pour un tableau.

• Queue : C’est une collection qui ordonne généralement ses éléments selon l’ordre
FIFO mais chaque implémentation de l’interface queue doit spécifier sa politique
d’ordonnancement.

• Deque : c’est une queue à deux extrémités souvent qui peut être utilisée comme FIFO
ou LIFO et est généralement utilisée pour implémenter une pile

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
25

 1. LES INTERFACES: PRÉSENTATION GÉNÉRALE

 Map : Une collection qui mappe (fait correspondre) des


clés à des valeurs . Une map ne peut pas contenir des
clés dupliquées, chaque clé correspond à une valeur au
plus.

• • SortedMap — Une map qui maintient ses éléments


ordonnés selon l’ordre ascendant des clés. (dictionnaires,
annuaire téléphoniques….)

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
26

 Comment utiliser une collection?

 Choisir la structure la plus adaptée au problème


 Exemple:
• Annuaire => Map
• Un ensemble qui accepte les doublons => List

 Choisir l’implémentation adéquate

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
27

 Comment utiliser une collection?

 Déclarer un objet du type de la collection choisi :


Exemple: un tableau redimentionelle
List list = new ArrayList();
Ou
ArrayList list = new ArrayList();

 Cette déclaration crée une collection de type ArrayList dont les élements sont de
type Object.

=> Il faut caster un élément pour le récupérer

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
28

 Comment utiliser une collection?

List list = new ArrayList();


list.add("hello");
String s = (String) list.get(0);

 Que faire si on veut avoir une collection d’objets du même type sans cast?

 Version améliorée (meilleure vérification de type et moins de cast)

List<String> list = new ArrayList<String>();


list.add("hello");
String s = list.get(0);

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
29

 Comment utiliser une collection?

 Toutes les interfaces du JCF sont génériques.

 Dans le cadre des collections, ceci permet de déclarer des interfaces ou des classes
dont le type des éléments est un paramètres à spécifier

 Voici, par exemple, la déclaration de l’interface Collection


public interface Collection<E> …

 Préciser le type E permet d’éliminer les casts.

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
30

 Comment utiliser une collection?

 Parcourir la collection
• Utiliser un itérateur, ou for (each-loop), ou bien,
• Utiliser les méthodes offertes par l’interface ou l’implémenattion
choisie
 Exemple: pour la collection ArrayList comment on va récupérer
l’élément 0?

 Trier, Rechercher, etc: utiliser les méthodes définies dans les


classes utilitaires

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
31

 Classes utilitaires (Algorithmes)

 Fournissent des algorithmes classiques pour les collections

 La classe Arrays fournit des méthodes statiques pour les tableaux, en particulier
• trier un tableau
• faire des recherches rapides dans un tableau trié
• transformer un tableau en liste

 La classe Collections (avec un s à la fin) fournit des méthodes statiques pour les
collections, en particulier
• trier une collection
• faire des recherches rapides dans une collection triée

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
32

 Classe Collections (méthodes)

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
33

DESCRIPTION DES
INTERFACES DU
FRAMEWORK

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
34

1.L’INTERFACE
COLLECTION

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
35

 L’interface java.util.Collection

 C’est la racine de la hiérachie.

 Elle dérive de l’interface


Iterable et ses sous
classes sont :
• List
• Set
• SortedSet
• NavigableSet
• Queue
• Deque

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
36

 Indépendamment du sous-type de collection utilisé il existe quelques


méthodes basiques permettant, entre autres, d’ajouter et de supprimer
un élément.

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
37

 On peut aussi faire ces opérations pour un plusieurs éléments


constituant une collection.

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
38

 Collections et types primitifs

 Les collections de java.util ne peuvent pas contenir de valeurs des


types primitifs

 Avant le JDK 5, il fallait donc utiliser explicitement les classes


enveloppantes des types primitifs (exp: Integer, Double, etc.)

 A partir du JDK 5, les conversions entre les types primitifs et les


classes enveloppantes peuvent être implicites avec le « boxing » /
« unboxing » (envelopper/déballer)

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
39
 Exemple de liste avec (un)boxing  Exemple de liste sans(un)boxing
(avant
jdk5)

 List l = new ArrayList();


 List<Integer> l = new
l.add(new Integer(10));
ArrayList<Integer>();
l.add(new Integer(-678));
l.add(10);
l.add(new Integer(87));
l.add(-678);
l.add(new Integer(7));
l.add(87);
int i = l.get(0).intValue();
l.add(7);
int i = l.get(0);

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
40

2. PARCOURIR
UNE COLLECTION

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
41

 Parcourir une collection

 Il y a trois manières de parcourir une collection

1. En utilisant des itérateurs


2. En utilisant la boucle for (each-loop)
3. En utilisant les streams (depuis java 8)

Certains collections (comme les listes) offrent leurs propres


méthodes.

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
42

 En utilisant un itérateur (1/2)

 Un itérateur est une instance d’une classe qui implémente


l’interface Iterator.

 Il permet de parcourir une collection et de supprimer des éléments


de manière sélective en cas de besoin.

 On obtient un itérateur pour une collection en appelant la


méthode iterator qui est l’unique méthode de l’interface
Iterable<E>.

 Remarque:
 L’interface « Collection » dérive de l’interface « Iterable »

 Toutes les collections implémentent une méthode iterator() qui


renvoie un itérateur (objet de type Iterator)

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
43

 En utilisant un itérateur (2/2)


 Cette interface (Iterator) définit des méthodes pour des objets capables de parcourir les
données d'une collection :

Iterable<E> collection = ...


Iterator<E> it = collection.iterator();
while ( it.hasNext() ){
E o = it.next();

}

Dr. Youssef Elmir (elmir@estin.dz)


LES COLLECTIONS
44

 En utilisant for

 Il est aussi possible d’utiliser for (each loop) pour parcourir la collection

Iterable<E> collection = ......;


for (E o : collection){
//manipuler l’objet o
…;
}

Iterable<E> collection = ...


Iterator<E> it = collection.iterator();
while ( it.hasNext() ){
E o = it.next();

}

Dr. Youssef Elmir (elmir@estin.dz)

Vous aimerez peut-être aussi