Post on 04-Apr-2015
Les Collections en JAVA
1
Rappels Java
Les Collections en JAVA
2
Les collections Une collection est un objet qui regroupe de
multiples éléments en une seule unité. exemples:
collection de joueurscollection d’objets d’art
Les tableaux Array sont des exemples d’implémentation d’une collection
La Classe Vector en est une autre
Les Collections en JAVA
3
Autour des collections
Interfaces Implémentation Manipulation / Algorithmes
Les Collections en JAVA
4
Hiérarchie d’Interfaces:
http://java.sun.com/docs/
Les Collections en JAVA
5
{♣,☼,,,,}
[☼;;;; ☼;;]
6
Les Collections en JAVA
6
Interface List
Une collection ordonnée (connue aussi sous le nom séquence).
L’utilisateur de cette interface a le contrôle sur les places ou sont inséré les éléments.
Contrairement à un ensemble, une liste peut contenir des éléments dupliqués.
Les Collections en JAVA
7
Interface List
public interface List extends Collection {
// Positional Access Object get(int index); Object set(int index, Object element); void add(int index, Object element); Object remove(int index); boolean addAll(int index, Collection c);
Les Collections en JAVA
8
Interface List
// recherche int indexOf(Object o); //première occurrence
int lastIndexOf(Object o); // Itération ListIterator listIterator(); ListIterator listIterator(int index); //sous liste
List subList(int from, int to); }
Les Collections en JAVA
9
List / implémentations
ArrayList · maintenue dans un tableau redimensionnable · l'accès à un élément par son indice RAPIDE · insertion LENTE (surtout si elle a lieu au début de la liste)
mais rapide en fin de liste LinkedList · formée de cellules liées par des références · insertion d'éléments RAPIDE · l'accès à un élément par son indice LENT Vector · similaire à ArrayList
Les Collections en JAVA
10
Interface Set:
Depuis java 1.2 public interface Set extends Collection
Représente un ensemble dans le sens mathématique« Collection d’ojets distincts, non ordonnés »
ImplémentationsHashSet, TreeSet
Les Collections en JAVA
11
Interface Set
public interface Set { // Opérations basiques int size(); boolean isEmpty(); boolean contains(Object element); boolean add(Object element); remove(Object element); Iterator iterator();
Les Collections en JAVA
12
Interface Set
//autres opérations boolean containsAll(Collection c); boolean addAll(Collection c); boolean removeAll(Collection c); boolean retainAll(Collection c); void clear(); Object[] toArray(); Object[] toArray(Object a[]);
}
Les Collections en JAVA
13
Implémentations
HashSet implantation par table de hachage (Ordre aléatoire) ajout d'élément rapide test d'appartenance très rapides Les opérations add, remove, contains and size sont
exécutées en un temps constant. TreeSet
les éléments sont placés dans (un arbre de recherche binaire équilibré)
les éléments sont triés Les opérations add, remove, contains and size sont
relativement lentes
Les Collections en JAVA
14
Implémentations
LinkedHashSet
Les Collections en JAVA
15
Implémentations
import java.util.*;
public class TrouveDoublons {
public static void main(String args[]) { Set s = new HashSet(); for (int i=0; i<args.length; i++){ if (!s.add(args[i])) System.out.println("Doublon :" + args[i]); } System.out.println(s.size()+" mots différents : "+s); }}
Les Collections en JAVA
16
java TrouveDoublons salut bonjour tcho tcho hello
> Doublon : tcho> mots différents : [tcho, hello, salut, bonjour]Et si on utilise un TreeSet> Doublon : tcho> mots différents : [bonjour, hello, salut, tcho]
Les Collections en JAVA
17
Opération sur les ensembles [Set]
s1.containsAll(s2): teste l'inclusion de s2 dans s1
s1.addAll(s2) union de s1 et s2 s1.retainAll(s2) intersection de s1 et s2 s1.removeAll(s2) différence entre s1 et s2/!\ ne donne pas le même résultat que
s2.removeAll(s1)
Les Collections en JAVA
18
Opération sur les ensembles [Set]
Pour effectuer ces opérations sans destruction, utiliser un ensemble supplémentaireexemple :Set union = new HashSet(s1);union.add(s2);
Les Collections en JAVA
19
interface Enumeration
Un objet implémentant cette interface génère une série d’éléments d’une manière séquentielle
La récupération des éléments de cette série s’effectue par un appel nextElement()
Exemple: imprimer les éléments d’un vecteur v
for (Enumeration e = v.elements() ; e.hasMoreElements() ;) { System.out.println(e.nextElement());
}
Les Collections en JAVA
20
Interface Enumeration
boolean hasMoreElements() Object nextElement() Implémentation:
public class StringTokenizer implements Enumeration
Les Collections en JAVA
21
Vector
Comme un tableau arrayContient des éléments accessibles par leur indiceJava 1. peux utilisée dans les programmes
actuels Différent d’un tableau
Taille variableContenu hétérogène /!\ collection d’objets
Les Collections en JAVA
22
Vector
Constructeurs Vector() Vector(Collection c) …
Méthodes add(int index, Object element) add(Object o) addAll(Collection c) ajout à la fin dans l’ordre
dans le quel ses éléments sont rendu par l’ «Iterator» de la collection
Les Collections en JAVA
23
Vector
clear() efface tous les éléments du vecteur boolean contains(Object elem) containsAll(Collection c) Object elementAt(int index) Enumeration elements() int indexOf(Object elem) int indexOf(Object elem, int index) boolean isEmpty() Object remove(int index) size() ……………………….
Les Collections en JAVA
24
La classe Collection
(similaire à la classe Arrays) fournit des méthodes pour :
trier (sort)mélanger (schuffle) inverser l'ordre des éléments (reverse) remplir (fill)
Les Collections en JAVA
25
La classe Collection
copier (copy) rechercher un élément (binarySearch) trouver les valeurs extrêmes (min, max) ! Certaines de ces méthodes ne peuvent être
utilisées que sur des Collections de type liste.
Les Collections en JAVA
26
Iterator (Itérateur)
Un itérateur est un objet permettant de parcourir en séquence les éléments d’une collection(curseur)
Semblable à Enumeration mais préférable Utile quand les éléments de la collection ne sont pas
indicés. Ex: parcours d'une liste à l'aide d'un itérateur
List ma_list =new ArrayList();…for (Iterator iter = ma_list. iterator( ) ; i.hasNext( );)System.out.println (i.next( )) ;
Les Collections en JAVA
27
Iterator
Avantages Permet de s'affranchir de toute numérotation et de parcourir
une collection quelconque sans se soucier de la manière dont sont stockées les données
Permet de supprimer un élément de la collection sous-jacente
Peut renvoyer un itérateur: Toute classe implémentant l’une des deux interfaces List et
Set
Les Collections en JAVA
28
Iterator
Les méthodes:boolean hasNext();Object next();void remove(); méthode utilisée après que
l’itérateur ait accédé à un élément
Les Collections en JAVA
29
MAP (associations)
Tableaux associatifs , Fonctions, Maps Structure pour mémoriser une collection de
couples (clé-valeur) Mécanisme de « Fonction »: les clés sont
uniques, une valeur peut-être associée à plusieurs clés.
Une clé permet de retrouver rapidement la valeur associée
Les Collections en JAVA
30
MAP (associations)
Cas d’utilisation: Encapsulation: fabriquer des liens entre objet
sans modifier ces derniersMultiensembles: Map (élément, nombre
d’occurences)
Les Collections en JAVA
31
Implémentations
HashMap : implémentation usuelleOrdre aléatoire des clésAjout, accès rapides
TreeMap : clés de la Map triésAjout lent
LinkedHashMap
Les Collections en JAVA
32
Conseils:
Faire référence aux collections en utilisant les interfaces:List ma_liste=new ArrayList();Set mon_ens=new TreeSet();Map ma_fonction=new HashMap();
Mais!! les classes concrètes sont souvent plus riches que les interfaces