Les Collections en JAVA Rappels Java 1 Les Collections en JAVA Les collections ¬ Une collection est un objet qui regroupe de multiples éléments en une seule unité. ¬ exemples: ¬collection de joueurs ¬collection d’objets d’art ¬ Les tableaux Array sont des exemples d’implémentation d’une collection ¬ La Classe Vector en est une autre 2 1 Les Collections en JAVA Autour des collections ¬ Interfaces ¬ Implémentation ¬ Manipulation / Algorithmes 3 Les Collections en JAVA Hiérarchie d’Interfaces: http://java.sun.com/docs/ 4 2 Les Collections en JAVA 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. 5 Les Collections en JAVA 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); 6 3 Les Collections en JAVA 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); } 7 Les Collections en JAVA 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) 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 8 4 Les Collections en JAVA 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émentations ¬HashSet, ¬TreeSet 9 Les Collections en JAVA 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(); 10 5 Les Collections en JAVA 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[]); } 11 Les Collections en JAVA Implémentations ¬ HashSet ¬implantation par table de hachage ¬ajout d'élément rapide ¬test d'appartenance très rapides ¬ TreeSet ¬les éléments sont placés dans (un arbre de recherche binaire équilibré) ¬les éléments sont triés 12 6 Les Collections en JAVA 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); } } 13 Les Collections en JAVA 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] 14 7 Les Collections en JAVA 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) 15 Les Collections en JAVA Opération sur les ensembles [Set] ¬ Pour effectuer ces opérations sans destruction, utiliser un ensemble supplémentaire ¬exemple : Set union = new HashSet(s1); union.add(s2); 16 8 Les Collections en JAVA 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()); } 17 Les Collections en JAVA Interface Enumeration ¬ boolean hasMoreElements() ¬ Object nextElement() ¬ Implémentation: ¬public class StringTokenizer implements Enumeration 18 9 Les Collections en JAVA Vector ¬ Comme un tableau array ¬Contient des éléments accessibles par leur indice ¬… ¬ Différent d’un tableau ¬Taille variable ¬Contenu hétérogène ¬/!\ collection d’objets 19 Les Collections en JAVA 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 20 10 Les Collections en JAVA 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() ………………………. 21 Les Collections en JAVA 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) 22 11 Les Collections en JAVA 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. 23 12