Vous êtes sur la page 1sur 28

Programme de baccalauréat en informatique

Programmation avancée en Java


IFT-21133

Collections
Module 7

Michelle Carrier
Chargé
Chargée d’
d’enseignement
et Rédactrice

Édition hiver 2007

Université virtuelle
Département d’informatique
africaine
et de génie logiciel
Plan

• Introduction
• Structures de données
• Collections
• List
• Set
• Map
• Itérateurs
• Algorithmes

Université virtuelle
Département d’informatique
africaine
et de génie logiciel
Introduction

• Définitions:
• Une structure de données est un moyen
efficace d’organiser un ensemble d’informations
similaires, sous la forme de tableaux, de listes,
de piles, d’arbres, etc. (ex: Classes Array,
Vector, Stack)
• Ces structures ont des caractéristiques qui les
rendent uniques et complémentaires (temps
d’accès, espace mémoire, algorithmes de
recherches spécifiques).

• Références:
• Volume, chapitre 21, pages 1201 à 1235
• http://java.sun.com/developer/onlineTraining/co
llections/Collection.html

Département d’informatique et de génie logiciel 3


Introduction

• Définitions (suite) :
• Framework de collections (Java 2)
• Une collection est une structure de données
spécialisée.
• Il s’agit d’une abstraction de boîte
(contenant), pouvant contenir un groupe
d’éléments de même type ou un groupe
d’objets.
• Les éléments peuvent être uniques, c’est-à-
dire, qu’ils ne peuvent pas être dupliqués (Set,
SortedSet)
• Ou bien exister en plusieurs exemplaires
(Collection, List)

Département d’informatique et de génie logiciel 4


Introduction

• Définitions (suite) :
• Les éléments peuvent être ordonnés (Sorted) ou non.
• Peuvent être accessibles par des clés (Map,
SortedMap) et comporter des données composées
(clé, valeur).

• Intérêt :
• Les collections constituent une évolution par
rapport aux structures de données pour plusieurs
raisons particulières :
• Utilisation de structures existantes (exemple de
réutilisation de code OO).
• Rapidité de développement.
• Excellente performance (amélioration de la vitesse
d’exécution et limitation de la consommation de la
mémoire.

Département d’informatique et de génie logiciel 5


Description du FrameWork

• Hiérarchie des collections :

Département d’informatique et de génie logiciel 6


Description du FrameWork

• Interfaces (contenant des méthodes


optionnelles) :
• Permet de traiter les collections sans implémenter
les méthodes optionnelles.
• Par exemple, un Set (par définition non modifiable)
n'a pas besoin de la méthode add
• Il doit tout de même la redéfinir pour ne pas
générer une exception de type
UnsupportedOperationException.
• Il y a des opérations à exécuter sur un seul objet
ou bien sur une collection d’objets.

Département d’informatique et de génie logiciel 7


Interface Collection

public interface Collection {


// opérations sur un élément
int size(); // nombre d’éléments
boolean isEmpty(); // retourne vrai si vide
boolean contains(Object o); // appartenance d’un
objet
boolean add(Object o); // ajout d’élément
boolean remove(Object o);//suppression d’élément
Iterator iterator(); // Compteur d’itération
boolean Equals(Object o); // Tester si deux objets
sont égaux.
int HashCode(); // retourne le code de hachage
calculé pour la collection.

Département d’informatique et de génie logiciel 8


Interface Collection

// opérations sur un groupe d’éléments


boolean containsAll(Collection c); // inclusion
boolean addAll(Collection c); // union
boolean removeAll(Collection c); // différence
boolean retainAll(Collection c); // intersection
void clear(); // vide la collection
Object[] toArray(); // tableaux
Object[] toArray(Object[] o); // précise le type du
tableau à retourner.*
}

* (String[] chaine = col.toArray(new String[0]);)

Département d’informatique et de génie logiciel 9


Exemple de collection

Collection<String> collection = new


ArrayList<String>();
...
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
if (removalCheck(element)) {
iterator.remove();
}
}

• Les différentes collections et leurs dérivées sont


très similaires à l’interface Collection:

Département d’informatique et de génie logiciel 10


Description du FrameWork (suite)

Classes d'implémentations

Table Table de
Tableau Liste
de Hachage et Arbre
de taille chaîné
Hacha- Liste balancé
variable e
ge Chaînée
Hash- LinkedHash
Set TreeSet
Set -Set

Inter- List Linked-


ArrayList
faces List

Hash- LinkedHash
Map TreeMap
Map -Map

Département d’informatique et de génie logiciel 11


Collection Set

• Set comporte trois implémentations :


• TreeSet: éléments rangés de manière ascendante.
• HashSet: éléments rangés suivant une méthode
de hachage.
• LinkedHashSet: Similaire à HashSet mais
éléments accessibles selon l’ordre d’insertion.

Département d’informatique et de génie logiciel 12


Exemple de collection Set

import java.util.*;
public class SetExample {
public static void main(String args[]) {
// Table de Hachage
Set<String> set = new HashSet<String>();
set.add("Bernadine");
set.add("Elizabeth");
set.add("Gene");
set.add("Elizabeth");
set.add("Clara");
System.out.println(set);
// Pour trié un Set
Set<String> setTrie = new TreeSet<String>(set);
System.out.println(setTrie);
}
}
Affichage: [Gene, Clara, Bernadine, Elizabeth]
[Bernadine, Clara, Elizabeth, Gene]
Département d’informatique et de génie logiciel 13
Collection List

• List comporte deux implémentations :


• ArrayList utilisé le plus souvent, sauf s'il y a
insertion d'élément(s) au milieu de la liste.
• LinkedList pour éviter les décalages lors
d’insertions.

• Caractéristiques :
• Collection ordonnée.
• Permet la duplication des éléments.
• Interface compléter par la possibilité d'ajouter ou
de retirer des éléments se trouvant à une position
donnée.
• Permet également de travailler sur des sous-listes.

Département d’informatique et de génie logiciel 14


Exemple de collection List

import java.util.*;

public class ListExample {


public static void main(String args[]) {
List<String> list = new ArrayList<String>();
list.add("Bernadine");
list.add("Elizabeth");
list.add("Gene");
list.add("Elizabeth");
list.add("Clara");
System.out.println(list);
System.out.println("2: " + list.get(2));
System.out.println("0: " + list.get(0));
LinkedList<String> queue = new
LinkedList<String>();

Département d’informatique et de génie logiciel 15


Exemple de collection List

queue.addFirst("Bernadine");
queue.addFirst("Elizabeth");
queue.addFirst("Gene");
queue.addFirst("Elizabeth");
queue.addFirst("Clara");
System.out.println(queue);
queue.removeLast();
queue.removeLast();
System.out.println(queue);
}
}
Affichage : [Bernadine, Elizabeth, Gene, Elizabeth, Clara]
2: Gene
0: Bernadine
[Clara, Elizabeth, Gene, Elizabeth, Bernadine]
[Clara, Elizabeth, Gene]

Département d’informatique et de génie logiciel 16


Collection Map

• Map comporte trois implémentations :


• HashMap, pour l’insertion, la localisation et la
suppression facile d’éléments
• LinkedHashMap pour avoir accès aux éléments dans
l’ordre d’insertion.
• TreeMap pour parcourir les clés de façon ordonnée

• Une Map est une collection de paires, contenant


obligatoirement une clé unique et une valeur.

Département d’informatique et de génie logiciel 17


Collection Map

• Interface interne Entry permettant de manipuler


les éléments d'une paire comme suit:
public interface Map.Entry<K,V> {
K getKey(); // retourne la clé
V getValue(); // retourne la valeur associée à la
clé
V setValue(V value); // permet de modifier une
valeur d'une paire.*
}

*Attention de ne pas modifier directement la valeur


associée à une clé. Il faut plutôt retirer l'ancienne clé
(et donc sa valeur aussi) et ajouter une nouvelle clé
(avec cette nouvelle valeur).

Département d’informatique et de génie logiciel 18


Exemple de collection Map

import java.util.*;

public class MapExample {


public static void main(String args[]) {
Map map = new HashMap();
Integer ONE = new Integer(1);
for (int i=0, n=args.length; i<n; i++) {
String key = args[i];
Integer frequency = (Integer)map.get(key);
if (frequency == null) {
frequency = ONE;
}

Département d’informatique et de génie logiciel 19


Exemple de collection Map

else {
int value = frequency.intValue();
frequency = new Integer(value + 1);
}
map.put(key, frequency);
}
System.out.println(map);
Map sortedMap = new TreeMap(map);
System.out.println(sortedMap);
}
}

Département d’informatique et de génie logiciel 20


Exemple de collection Map

• Affichage dans le désordre :


[prescribed=1, a=1, time=2, any=1, no=1,
shall=1, nor=1, peace=1, owner=1, soldier=1,
to=1, the=2, law=1, but=1, manner=1,
without=1, house=1, in=4, by=1, consent=1,
war=1, quartered=1, be=2, of=3]

• Affichage dans l’ordre :


[a=1, any=1, be=2, but=1, by=1, consent=1,
house=1, in=4, law=1, manner=1, no=1,
nor=1, of=3, owner=1, peace=1, prescribed=1,
quartered=1, shall=1, soldier=1, the=2, time=2,
to=1, war=1, without=1]

Département d’informatique et de génie logiciel 21


Itérateurs

• Parcours des collections à l'aide d'itérateurs :


• Sert à parcourir une collection indépendamment de
son type (Set, Map, List, etc.).
• Permet d’utiliser des algorithmes génériques qui ne
reposent pas sur la structure de données utilisée.

public interface Iterator {


boolean hasNext();
Object next();
void remove(); // Optionnel
}

Département d’informatique et de génie logiciel 22


Itérateurs

• Exemple d’utilisation d’un itérateur :


• Employé avec l’iterator() disponible dans
l’interface.

List lst = new ArrayList();

for (Iterator it = lst.iterator(); it.hasNext(); )


{
System.out.println(it.next());
}

Département d’informatique et de génie logiciel 23


Algorithmes génériques

• Les algorithmes génériques sont définis


comme des méthodes statiques de la classe
Collection :
• Tri avec ou sans comparateur : sort()
• Mélange: shuffle()
• Opérations sur l’ordre: reverse(), fill() et copy()
• Recherche: binarySearch(), min() et max()

• Les algorithmes ne s’appliquent qu’aux listes,


sauf les algorithmes de sélection du min() et du
max().

Département d’informatique et de génie logiciel 24


Algorithmes génériques

• Interface Comparable :
• Algorithme très rapide et stable (les éléments
équivalents ne sont pas réordonnés)
• Utilisé pour trier la liste en utilisant l'ordre naturel
du type.
• Classes doivent implémenter la méthode
Comparable (contient une seule méthode
compareTo):

public interface Comparable <T> {


public int compareTo(T obj);
}

Département d’informatique et de génie logiciel 25


Algorithmes génériques

• Interface Comparable (suite) :


• Méthode retourne:
• Entier positif si l'objet qui fait l'appel est plus grand
que l’objet auquel on le compare (obj)
• Zéro si objets identiques,
• Entier négatif si l'objet qui fait l'appel est plus petit
que obj.

• Si une classe n’implémente pas Comparable, on


doit implanter l'interface Comparator :
• Permet de comparer deux éléments de la collection.
• Pour trier, nous passons une instance de cette classe
à la méthode Sort().

Département d’informatique et de génie logiciel 26


Algorithmes génériques

Comparator comp = new Comparator(){


int compare(Object o1, Object o2) {
String s1 = (String) o1;
String s2 = (String) o2;
if (s1.length() < s2.length())
return(-1);
else

}
};
int r = comp.compare("bonjour","bonsoir");
System.out.println(r); // r = 0 (même taille)

Département d’informatique et de génie logiciel 27


Utilisation de collections

• Démonstration de différents exemples


d’implémentation des collections List, Set et
Map.

Département d’informatique et de génie logiciel 28

Vous aimerez peut-être aussi