38
Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Embed Size (px)

Citation preview

Page 1: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Les collections

d'objetsPrésenté par:Abdoulaye FAYEPape moussa NDIAYE

Sous la supervision de:

Mme. SANKARE

Programmation en JAVA 13/08/2012

Page 2: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

STRUCTURE DE DONNEES

C'est l'organisation efficace d'un ensemble de données, sous la forme de tableaux, de listes, de piles etc. Cette efficacité réside dans la quantité mémoire utilisée pour stocker les données, et le temps nécessaire pour réaliser des opérations sur ces données.

Page 3: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Collections & Java

Une collection gère un groupe d'un ensemble d'objets d'un type donné ; ou bien c'est un

objet qui sert à stocker d'autres objets. Dans les premières versions de Java, les

collections étaient représentées par les "Array","Vector" etc. Puis avec Java 1.2

(Java 2), est apparu le framWork de collections qui tout en gardant les principes de bases,

Page 4: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Collections & Java

il a apporté des modifications dans la manière avec laquelle ces collections ont été réalisées et hiérarchisées.

Tout en collaborant entre elles, ces collections permettent de réaliser dans des catégories de logiciels des conceptions réutilisables.

Page 5: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Collections Framwork de Java

Réparties en deux groupes:

Page 6: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

3.1. Interfaces

Organisées en deux catégories: Collection & Map.

Page 7: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Définition des termes:

- Collection: un groupe d'objets où la duplication peut-être autorisée.

- Set: est ensemble ne contenant que des valeurs et ces valeurs ne sont pas dupliquées.

Par exemple l'ensemble A = {1,2,4,8}. Set hérite donc de Collection, mais n'autorise pas la duplication. SortedSet est un Set trié.

Page 8: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

- List: hérite aussi de collection, mais autorise la duplication. Dans cette interface, un

système d'indexation a été introduit pour permettre l'accès (rapide) aux éléments de la

liste.

- Map: est un groupe de paires contenant une clé et une valeur associée à cette clé. Cette interface n'hérite ni de Set ni de Collection. La raison est que Collection traite des données simples alors que Map des données composées (clé,valeur). SortedMap est un Map trié.

Page 9: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

3.2. Implémentations

Page 10: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Par contre, il n'y a pas d'implémentation de l'interface Collection. Pour Set et Map

l'implémentation est soit sous la forme d'une table de hachage (HashSet/HashMap) ou

bien sous la forme d'un arbre (TreeSet/TreeMap). Pour la liste: soit sous la forme de

tableau (ArrayList) ou une liste chaînée (LinkedList).

Page 11: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Itérateurs

Un itérateur est un objet qui a pour rôle de parcourir une collection.

Page 12: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Les différents types de collections

En se focalisant sur les passage suivant, fort est de constater que les interfaces ont des particularités correspondant à des besoins spécifiques. Les objets Les objets de type List servent à stocker

des objets sans condition particulière sur la façon de les stocker. Ils acceptent toutes

les valeurs, même les valeurs nulle

Page 13: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Les types Set sont un peu plus restrictifs, car ils

n’autorisent pas deux fois la même valeur (le même objet), ce qui est pratique pour une

liste d’éléments uniques, par exemple les Maps sont particulières, car elles fonctionnent avec un système clé - valeur pour ranger et retrouver les objets qu’elles contiennent.

Maintenant que nous avons une brièvement idées les différences entre ces types, voyons

comment utiliser ces objets.

Page 14: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Les objets List

Les objets appartenant à la catégorie List sont, pour simplifier, des tableaux extensibles à volonté. On y trouve les objets Vector, LinkedList et ArrayList.

Vous pouvez y insérer autant d’éléments que vous le souhaitez sans craindre de dépasser la taille de votre tableau.

Ils fonctionnent tous de la même manière : vous pouvez récupérer les éléments de la liste via leurs indices. De plus, les List contiennent des objets.

Page 15: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

L’objet LinkedList

Une liste chaînée 1 est une liste dont chaque élément est lié aux éléments adjacents

par une référence à ces derniers. Chaque élément contient une référence à l’élément

précédent et à l’élément suivant, exceptés le premier, dont l’élément précédent vaut null, et le dernier, dont l’élément suivant vaut également null.

Page 16: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Voici un petit schéma (figure 2) qui vous permettra de mieux vous représenter le

fonctionnement de cet objet :

Page 17: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Voici un petit code pour appuyer nos dires :

import java.util.LinkedList;

import java.util.List;

import java.util.ListIterator;

public class Test {

public static void main(String[] args) {

List l = new LinkedList();

l.add(12);

l.add("toto ! !");

l.add(12.20f);

for(int i = 0; i < l.size(); i++)

System.out.println("ÉlØment à l’index " + i + " = " + l.get(i));

}

}

Page 18: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

System.out.println("\n \tParcours avec un itérateur ");

System.out.println("-----------------------------------");

ListIterator li = l.listIterator();

while(li.hasNext())

System.out.println(li.next());

Page 19: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Les deux manières de procéder sont analogues !

vu que tous les éléments contiennent une référence à l’élément suivant, de telles listes risquent de devenir particuliŁrement lourdes en grandissant ! Cependant, elles sont adaptées lorsqu’il faut beaucoup manipuler une collection en supprimant ou en ajoutant des objets en milieu de liste.

Page 20: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

L’objet ArrayList

ArrayList est un de ces objets qui n’ont pas de taille

limite et qui, en plus, acceptent n’importe quel type de données, y compris null !

Voici un exemple d’illustration avec ArrayList:

Page 21: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

import java.util.ArrayList;

public class Test {

public static void main(String[] args) {

ArrayList al = new ArrayList();

al.add(12);

al.add("Une chaîne de caractères !");

al.add(12.20f);

al.add(’d’);

for(int i = 0; i < al.size(); i++)

{

System.out.println("donnØe à l’indice " + i + " = " + al.get(i));

}

}

}

Page 22: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Si vous exécutez ce code, vous obtiendrez la figure 3

Page 23: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

il existe tout un panel méthodes fournies avec cet objet :

• add() permet d’ajouter un élément ;• get(int index) retourne l’élément à l’indice demandé • remove(int index) efface l’entrée à l’indice demandé • isEmpty() renvoie vrai si l’objet est vide ;• removeAll() efface tout le contenu de l’objet ;• contains(Object element) retourne vrai si l’élément

passé en paramètre est dans l’ArrayList.

Page 24: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Contrairement aux LinkedList, les ArrayList sont rapides en lecture, même avec un

gros volume d’objets. Elles sont cependant plus lentes si vous devez ajouter ou supprimer des données en milieu de liste. Pour résumer à l’extrême, si vous effectuez beaucoup de lectures sans vous soucier de l’ordre des éléments, optez pour une ArrayList ; en revanche, si vous insérez beaucoup de données au milieu de la liste, optez pour une Linkedlist.

Page 25: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Les objets Map

Une collection de type Map est une collection qui fonctionne avec un couple clé - valeur.

On y trouve les objets Hashtable, HashMap, TreeMap, WeakHashMap. . .

La clé, qui sert à identier une entrée dans notre collection, est unique. La valeur, au

contraire, peut être associée à plusieurs clés. Ces objets ont comme point faible majeur leur rapport conflictuel avec la taille des données à stocker.

Page 26: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

En effet, plus vous aurez de valeurs à mettre dans un objet Map, plus celles-ci seront lentes et lourdes : logique, puisque par rapport aux autres collections, il stocke une donnée supplémentaire par enregistrement

Page 27: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

L’objet Hashtable

On peut également dire table de hachage, si on le traduit mot à mot. . . On parcourt cet objet grâce aux clés qu’il contient en recourant à la classe Enumeration. L’objet Enumeration contient notre Hashtable et permet de le parcourir très simplement. Regardez, le code suivant insère les quatre saisons avec des clés qui ne se suivent pas, et notre énumération récupère seulement les valeurs :

Page 28: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

import java.util.Enumeration;

import java.util.Hashtable;

public class Test {

public static void main(String[] args) {

Hashtable ht = new Hashtable();

ht.put(1, "printemps");

ht.put(10, "été");

ht.put(12, "automne");

ht.put(45, "hiver");

Enumeration e = ht.elements();

while(e.hasMoreElements())

System.out.println(e.nextElement());

}

}

Page 29: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Cet objet nous offre lui aussi tout un panel de méthodes utiles :

• isEmpty() retourne vrai si l’objet est vide ;• contains(Object value) retourne vrai si la valeur est

présente. Identique à containsValue(Object value) ;• containsKey(Object key) retourne vrai si la clé passée en

paramètre est présente dans la Hashtable ;• put(Object key, Object value) ajoute le couple key - value

dans l’objet ;• elements() retourne une énumération des éléments de l’objet ;• keys() retourne la liste des clés sous forme d’énumération.

Page 30: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

De plus, il faut savoir qu’un objet Hashtable n’accepte pas la valeur null et qu’il est Thread Safe, c’est-à-dire qu’il est utilisable dans plusieurs threads 3 simultanément sans qu’il y ait un risque de conit de données.

Page 31: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

L’objet HashMap

Cet objet ne diŁre que trŁs peu de la Hashtable : il accepte la valeur null ; il n’est pas Thread Safe.

En fait, les deux objets de type Map sont, à peu de choses près, équivalents.

Page 32: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Les objets Set

Un Set est une collection qui n’accepte pas les doublons. Les Set sont particulièrement adaptés pour manipuler une grande quantité de données.

Cependant, les performances de ceux-ci peuvent être amoindries en insertion. Généralement, on opte pour un HashSet

Page 33: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

L’objet HashSet

C’est sans nul doute la plus utilisée des implémentations de l’interface Set. On peut parcourir ce type de collection avec un objet Iterator ou extraire de cet objet un tableau d’Object :

Page 34: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Illustration par à l’aide de ce code ci-après:import java.util.HashSet;

import java.util.Iterator;

public class Test {

public static void main(String[] args) {

HashSet hs = new HashSet();

hs.add("toto");

hs.add(12);

hs.add(’d’);

Iterator it = hs.iterator();

while(it.hasNext())

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

System.out.println("\nParcours avec un tableau d’objet");

System.out.println("-----------------------------------");

Object[] obj = hs.toArray();

for(Object o : obj)

System.out.println(o);

}

}

Page 35: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

Voici une liste des méthodes que l’on trouve dans cet objet :

• add() ajoute un ØlØment ;• contains(Object value) retourne vrai si l’objet

contient value ;• isEmpty() retourne vrai si l’objet est vide ;• iterator() renvoie un objet de type Iterator ;• remove(Object o) retire l’objet o de la collection ;• toArray() retourne un tableau d’Object.

Page 36: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

CONCLUSION

Une collection permet de stocker un nombre variable d’objets. Ainsi, à la suite de notre étude, on constate principalement trois types de collection : les List, les Set et les Map. Chaque type a ses avantages et ses inconvénients. Les Collection stockent des objets alors que les Map stockent un couple clé - valeur.

L’insertion fréquemment des données en milieu de liste, nécessite l’utilisation de LinkedList.

L’accès ou la rechercher à une valeur par une clé de recherche s’effectue via une collection de type Map.

En fin le traitement d’une grande quantité de données fait appel à une liste detype Set.

Page 38: Les collections d'objets Présenté par: Abdoulaye FAYE Pape moussa NDIAYE Sous la supervision de: Mme. SANKARE Programmation en JAVA 13/08/2012

MERCI DE VOTRE

AIMABLE ATTENTION