Rappels Java
Les tableaux Array sont des exemples d’implémentation d’une collection 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
Autour des collections Interfaces Implémentation Manipulation / Algorithmes
Hiérarchie d’Interfaces: http://java.sun.com/docs/
{♣,☼,,,,} [☼;;;; ☼;;] 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.
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);
Interface List int indexOf(Object o); //première occurrence // 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); }
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
Représente un ensemble dans le sens mathématique 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
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();
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[]); }
Implémentations HashSet TreeSet 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
Implémentations LinkedHashSet
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); }
java TrouveDoublons salut bonjour tcho tcho hello > Doublon : tcho > mots différents : [tcho, hello, salut, bonjour] Et si on utilise un TreeSet > mots différents : [bonjour, hello, salut, tcho]
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)
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);
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()); }
Interface Enumeration boolean hasMoreElements() Object nextElement() Implémentation: public class StringTokenizer implements Enumeration
Différent d’un tableau Vector Comme un tableau array Contient des éléments accessibles par leur indice Java 1. peux utilisée dans les programmes actuels Différent d’un tableau Taille variable Contenu hétérogène /!\ collection d’objets
Vector Constructeurs Méthodes Vector() Vector(Collection c) … 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
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() ……………………….
(similaire à la classe Arrays) fournit des méthodes pour : 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)
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.
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( )) ;
Iterator Avantages Peut renvoyer un itérateur: 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
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
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
MAP (associations) Cas d’utilisation: Encapsulation: fabriquer des liens entre objet sans modifier ces derniers Multiensembles: Map (élément, nombre d’occurences)
Implémentations HashMap : TreeMap : LinkedHashMap implémentation usuelle Ordre aléatoire des clés Ajout, accès rapides TreeMap : clés de la Map triés Ajout lent LinkedHashMap
Faire référence aux collections en utilisant les interfaces: 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