Vous êtes sur la page 1sur 22

Le langage Java

Introduction aux
collections

Professeur : C. Fessard Introduction POO 1


Le langage Java

Les Collections en
 Les Collections sont des objetsJava
qui stockent des objets
 Nombreux types de collections  Adapté à vos besoins

 Java permet de manipuler les principales structures de données


 les vecteurs dynamiques, les ensembles, les listes chaînées, les queues et les tables associatives.

Il existe deux types de collections :


 Les collections séquentiels : classes relatives aux vecteurs, aux listes, aux ensembles et aux queues implémentent
une même interface (Collection)
 Les collections associatifs : Les dictionnaires, tables associatives (implémentent l’interface Map)
Les génériques
 Spécifie le type de données stockées dans les collections
 Éviter que différents types d'objets
soient stockés dans les collections
 Le casting est désormais inutile
 Les données stockées sont vérifiées au moment
de la compilation au lieu de l'exécution

Professeur : C. Fessard Introduction POO 2


Le langage Java
Java 7 introduit l'opérateur diamant (diamond) pour les génériques.

Professeur : C. Fessard Introduction POO 3


Le langage Java

Interfaces & implémentations


Plusieurs types pour tous les besoins
Il existe deux types de collections :
 Les collections séquentiels : classes relatives aux vecteurs, aux listes, aux ensembles et aux queues implémentent
une même interface (Collection)
 Les collections associatifs : Les dictionnaires, tables associatives (implémentent l’interface Map)

Remarque : Les collections n’agrègent que des variables de types évolué, donc des références.

Principales interfaces :

 Deux hiérarchies distinctes


 Toutes les interfaces utilisent des génériques
 Chaque interface a ses avantages et inconvénients
 Vous devez choisir la meilleure stratégie selon vos besoins

Professeur : C. Fessard Introduction POO 4


Le langage Java

Quelques classes implémentant ces interfaces


 HashSet : Hashtable qui implémente l'interface Set
 TreeSet : arbre qui implémente l'interface SortedSet
 ArrayList : tableau dynamique qui implémente l'interface List
 LinkedList : liste doublement chaînée (parcours de la liste dans les deux sens) qui implémente l'interface List
 HashMap : Hashtable qui implémente l'interface Map
 TreeMap : arbre qui implémente l'interface SortedMap

Il est préférable d’utiliser les interfaces pour typer les variables


: List<Integer> list = new ArrayList<Integer>();

Utilisation d’interfaces pour le parcours des collections et leur


tri :
 Iterator : parcours des collections
 ListIterator : le parcours des listes dans les deux sens
(possibilité de modifier les éléments)
 Comparable : interface pour définir un ordre de tri naturel
pour un objet
 Comparator : interface pour définir un ordre de tri
quelconque

Professeur : C. Fessard Introduction POO 5


Le langage Java

L'interface
Méthode
boolean add(E e)
Collection
Ajouter un élément à la collection
Rôle

void clear() Supprimer tous les éléments de la collection


boolean contains(Object o) Retourner un booléen qui précise si l'élément est présent dans la collection
boolean isEmpty() Retourner un booléen qui précise si la collection est vide
Iterator<E> iterator() Retourner un Iterator qui permet le parcours des éléments de la collection
boolean remove(Object o) Supprimer un élément de la collection s'il est présent (optionnelle)
int size() Retourner le nombre d'éléments contenus dans la collection
Object[] toArray() Retourner un tableau contenant tous les éléments de la collection
String toString() redéfinie dans les collections, appel la méthode toString de chacun des éléments

Professeur : C. Fessard Introduction POO 6


Le langage Java
Opérations collectives
addAll (ca) : ajoute à la collection c tous les éléments de la collection ca,
removeAll (ca) : supprime de la collection c tout élément apparaissant égal à un des éléments de la collection ca,
retainAll (ca) : supprime de la collection tout élément qui n’apparaît pas égal à un des éléments de la collection
ca

Professeur : C. Fessard Introduction POO 7


Le langage Java

Itérateurs (Iterators) – interface


Collection
Présentation
Un iterateur:
 Est un objet générique
 Permet d'itérer (parcourir) sur une collection (implémentant l’interface Collection) d'une manière linéaire
 Lit seulement dans l'ordre croissant
 Peut supprimer un élément de la collection avec la méthode remove()

Quelques méthodes :
Méthode Description
boolean hasNext(); Test si l’élément suivant existe
E next(); Lit l’élément suivant
void remove(); Supprime l’élément courant

Professeur : C. Fessard Introduction POO 8


Le langage Java

Professeur : C. Fessard Introduction POO 9


Le langage Java

Interface
 Collection ordonnée
List
 Les éléments sont accessibles par un index (position)
 Peut contenir plusieurs fois le même élément
 Accepte null comme valeur d’élément

Implémentations List
ArrayList: Vector:
 Bonne performance lecture (get) et écriture (set)  thread-safe (toutes les méthodes sont
synchronisées)
LinkedList:  Mauvaise performance
 Meilleure performance pour ajouter/supprimer
 Mauvaise performance pour lecture et écriture
Méthodes usuelles
Méthode Description
void add(E e) Ajouter un élément à la fin de la liste
E get(int i) Retourne l’élément de position spécifié par i
Int size() Retourne la taille de la liste
void clear() supprime tous les éléments de tableau
E set(int i, E e) Remplace l’élément de position i par l’élément e
void add(int i, E e) Insert l’élément e à la position i
Object[] toArray() Renvoie un tableau contenant tous les éléments de la liste

Professeur : C. Fessard Introduction POO 10


Le langage Java

Interface
ListIterator
Itérateur bidirectionnel

Permet de lire une liste dans les deux directions:


 Uniquement disponible pour les implémentations de List
 Hérite de l’interface Iterator

Méthode Description
Quelques méthodes :
void add(E e) Ajouter un élément dans la collection
boolean hasPrevious() Test si l’élément précédent existe
boolean hasNext() Test si l’élément suivant existe
E previous() Retourne l'élément précédent
E next() Retourne l'élément suivant
void set(E e) Remplacer l'élément courant par celui fourni en paramètre
void remove() Supprime l'élément courant

Professeur : C. Fessard Introduction POO 11


Le langage Java

Professeur : C. Fessard Introduction POO 12


Le langage Java

Interface Set
(ensemble)
Ensemble d'éléments uniques

HashSet:
 Manipule la valeur de hachage de l'élément pour être efficace
 Un seul élément null

LinkedHashSet:
 Comme HashSet
 Gardez l'ordre dans lequel les éléments ont été insérés dans l'ensemble

TreeSet:
 Trier les éléments par ordre croissant

Professeur : C. Fessard Introduction POO 13


Le langage Java

Professeur : C. Fessard Introduction POO 14


Le langage Java

Map interface
 Un ensemble de clé/valeur, tableau associatif
 Chaque clé est unique
 Une valeur peut avoir plus d'une clé
 Les clés et valeurs sont des objets

Interface Map

Professeur : C. Fessard Introduction POO 15


Le langage Java

Implémentations de l’interface Map


HashMap – Table hachée
 Manipuler la valeur de hachage de la Clé pour être efficace
 Peut avoir des clé nulles et plusieurs valeurs à nulles

IdentityHashMap – Similaire à HashMap, seule différence


 Utilise l'opérateur == (à la place de equals()) pour vérifier si deux clés sont égales

WeakHashMap – Similaire à HashMap avec en plus


 lorsque les clés ne sont plus référencées ailleurs que dans la Map, le garbage collector peut supprimer les couples clés
valeurs

TreeMap – Arbre binaire


 Trie les éléments par la clé, dans l'ordre croissant

Méthodes
Méthode usuelles Description
put (<cle>, <valeur>) Ajouter une paire clé/valeur dans le tableau associatif
<valeur> get (<cle>) Renvoie la valeur liée à la clé
<valeur> remove (int index) Supprimer l'élément à la position spécifiée. Retourne la valeur supprimée
booléen containsKey (<cle>) Vérifiez si la clé existe dans le tableau
booléen containsValue (<valeur>) Vérifiez si la valeur existe dans la carte
Collection <valeur> values() Retourne la collection de valeur de la Map
Set<cle> keySet() Retourne l’ensemble des clés contenues dans la Map

Professeur : C. Fessard Introduction POO 16


Le langage Java

Professeur : C. Fessard Introduction POO 17


Le langage Java

Trier une
Comparateur collection
(Comparator)
Utilisé pour trier les Collections
Classe implémentant l’interface Comparator<E>
La valeur de retour est un nombre entier:
 Négatif si e1 est inférieure àe2
 Méthode à définir : int compare(E e1, E e2);  0 si égalité
 Positif si e1 est supérieure à e2

Trier un tableau de String par taille de la chaîne, ascendant

Professeur : C. Fessard Introduction POO 18


Le langage Java

Interface
Autre façon de trier les Collections Comparable
Classe implémentant l’interface Comparable La valeur de retour est un entier:
<E>  Négatif - instance courante inférieure au paramètre
 Méthode à définir : int compareTo(E e2);  0 si égalité
 Positif - instance courante supérieure au paramètre

Remarque - Les Wrappers (enveloppe de type primitif) t String implémente déjà Comparable.

Trie par ordre alphabétique

Professeur : C. Fessard Introduction POO 19


Le langage Java
Deux classes
Présentation utilitaires
JDK fournit deux classes utilitaires pour manipuler des tableaux et des collections :
 Arrays
 Collections
Classes utilitaires pour des manipulations usuelles

Ces classes sont exclusivement composées de méthodes statiques


 Vous ne pouvez pas créer des instances de ces classes (Singleton)

Méthodes usuelles de la classe Collections


Méthode Description
static int binarySearch (List <T>, T) Rechercher dans une liste un élément, retourne l’index
static void reverse (List <T>) Inverser l'ordre des éléments dans une liste
static Comparator inverseOrdre Retourne un Comparator qui trie inversement à celui passé en
(Comparator) paramètre
static void sort(List<T>, Comparator) Trier la liste par un objet comparateur

Professeur : C. Fessard Les collections 20


Le langage Java

Professeur : C. Fessard Les collections 21


Le langage Java
Méthodes usuelles de la classe
Méthode
Arrays Description
static List asList(T[]) Convertir un tableau en une liste, attention la liste retournée ne supporte
pas l'ajout d'objet !
static int binarySearch(Object[], Object) Rechercher dans un tableau trié une valeur donnée, retourne l’index
static void sort(Object[], Comparator) Trier un tableau via un objet comparateur
static String toString(Object[]) Créer une chaîne contenant le contenu d'un tableau

Professeur : C. Fessard Les collections 22

Vous aimerez peut-être aussi