Collections. POO-L3 H. Fauconnier2 Collections  types de données interfaces implémentations algorithmes  Interfaces:

Slides:



Advertisements
Présentations similaires
Cours n° 7 Standard Template Library II.
Advertisements

Cours n° 6 Standard Template Library I.
Au programme du jour …. Un peu plus de structures de données
Sensibilisation à l’Algorithmique et structure de données
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Cours n° 9 Conception et Programmation à Objets
Cours n° 8 Conception et Programmation à Objets
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
La programmation générique avec la STL EIUMLV - Informatique et Réseaux 99 Benoît ROMAND.
Approfondissement du langage
F. Voisin : Introduction à Java 1 Introduction à Java - les interfaces - Frédéric VOISIN FIIFO - « Remise à Niveau »
JAV - TD 6 Structures de données JAVA
Classes locales classes définies à l'intérieur d'un bloc de code,
Structures collectives en Java
IPA – Catherine Faron Zucke et Anne Marie Deryr. suite ordonnée d'éléments de taille variable ArrayList liste; liste = new ArrayList (); Ne peuvent contenir.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Les collections d'objets
POO-L3 H. Fauconnier1 Chapitre IV 1. classe Object, clonage 2. interfaces 3. classes internes et imbriquées.
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
Généricité (fin) collections…. GénéricitéPOO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Types paramètres bornés.
POO-L3 H. Fauconnier1 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X(); //non xA[1]=new Z(); //non Object XX[]int[] YZY[]Z[]
Java : Le Collections Framework (JCF)
Page de garde Classes de base du JDK Novembre 2000
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Chapitre 21 Collections Partie I Introduction Une collection : est un objet qui regroupe multiple éléments dans une unité. Une collection est.
1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Résumé du cours précédent.
Structures de données IFT-2000
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Rappels Java.
Présentation Structures de Données et TDA
IFT 6800 Atelier en Technologies d’information
Vector, Iterator, LinkedList
Indexation et Recherche d'Information
Chapitre 9 Les sous-programmes.
Cours du 22 novembre généricité. Chapitre VII Généricité.
Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres bornés.
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
Cours 6 décembre. Collections POO-L3 H. Fauconnier3 Collections types de données interfaces implémentations algorithmes Interfaces:
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Standard Template Library
Java, les objets : tout de suite ! Rassembler, grouper les objets
Les méthodes en java • Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. • Une méthode pour être utilisée.
Structures de données IFT-2000
Chapitre 21 Collections Partie II Algorithmes  Algorithmes sur des List : sort binarySearch reverse shuffle fill copy  Algorithmes sur des Collections.
J201 (JOC) Java Avancé juin 2007 ~ Brigitte Groléas ~
Objectifs À la fin de ce cours, vous serez capables de :
COURS DE PROGRAMMATION ORIENTEE OBJET :
Cours du 3/12. Threads threadPOO-L3 H. Fauconnier3 Threads  threads: plusieurs activités qui coexistent et partagent des données exemples:  pendant.
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
Cours 7 Classes locales Clonage Divers: tableaux.
ETNA – 1ème année Guillaume Belmas –
Un visiteur… …venu d’ailleurs
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
C# de plus près.  Ce sont globalement les mêmes que Java : ◦ Int(int16, int32), float, double, bool,…  Les classe « communes » sont également les mêmes.
Iterator Design Pattern Alessandro Soro Sylvain Giroux.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
1 Chapitre III (~70 transparents) Compléments. 2 Au sommaire de ce chapitre 1. Les fichiers Les classes utilitaires
Liste Une liste est une séquence d’éléments. Concept important: Chaque élément possède une position dans la liste. Notation: De quelles opérations a-t-on.
Cours du 26 octobre  Classes internes  Clones POO-L3 H. Fauconnier1.
Chapitre 21 Collections partie III Set Une collection qui contient des éléments uniques. Deux implémentation :  HashSet : stock les éléments.
Files de priorité (Priority Queue)
CSI2510 Structures des Données et Algorithmes
CSI25101 Les structures de données de base (structures de données « concrètes ») trailer header Tableaux Listes chaînées l.
JAVA et l'orientation objet Jean-Jacques LE COZ. Encapsulation L'encapsulation est le concept de masquer l'implémentation de la classe De ne permettre.
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Types paramètres bornés 4. Méthodes.
Chapitre X threads. threadPOO-L3 H. Fauconnier2 Threads  threads: plusieurs activités qui coexistent et partagent des données Exemples: pendant un chargement.
CSI1502: Principes fondamentaux de conception de logiciels Chapitre 12: Structures de données.
Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 1 TD 6 IJA Structures de données JAVA.
Transcription de la présentation:

Collections

POO-L3 H. Fauconnier2 Collections  types de données interfaces implémentations algorithmes  Interfaces:

POO-L3 H. Fauconnier3 Collections: les interfaces Les collections sont des interfaces génériques  Collection : add, remove size toArray… Collection : Set : éléments sans duplication Set :  SortedSet : ensembles ordonnés SortedSet : List : des listes éléments non ordonnés et avec duplication List : Queue : files avec tête: peek, poll (défiler), offer (enfiler) Queue :  Map :association clés valeurs Map :  SortedMap avec clés triées SortedMap<K,V Certaines méthodes sont optionnelles (si elles ne sont pas implémentées UnsupportedOperationException). UnsupportedOperationException En plus:  Iterator : interface qui retourne successivement les éléments next(), hasNext(), remove() Iterator :  ListIterator : itérateur pour des List, set(E) previous, add(E) ListIterator :

POO-L3 H. Fauconnier4 Collection public interface Collection extends Iterable { // operations de base int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optionnel boolean remove(Object element); //optionnel Iterator iterator(); // implémente Iterable // operations des collections boolean containsAll(Collection c); boolean addAll(Collection c); //optionnel boolean removeAll(Collection c); //optionnel boolean retainAll(Collection c); //optionnel void clear(); //optionnel // Array Object[] toArray(); T[] toArray(T[] a); }

Génériques…  Collection colN; définit une collection pour des Number (rappel une collection de Integer n'est pas une extension d'une collection de Number )  Collection col; définit une collection qui peut contenir tout objet (pas de vérification de type)  boolean addAll(Collection c); permet d'ajouter à la collection des extensions de E  static boolean addAll(Collection c, T... elements) est une méthode de la classe Collections : permet d'ajouter à une collection c des éléments de la classe T SI c peut les contenir (superclasse). POO-L3 H. Fauconnier5

6 Collection  Les collections sont génériques  Parcours: On peut parcourir les éléments par « for » (implements Iterable): for (Object o : coll) System.out.println(o); Ou avec un Iterator: static void filtre(Collection c) { for (Iterator it = c.iterator(); it.hasNext();) if (!cond(it.next())) it.remove(); }

Iterable, Iterator, for  Iterator: public interface Iterator { boolean hasNext(); E next(); void remove(); //optionnel }  Iterable: public interface Iterable { Iterator iterator() }  For: Pour X qui implémente Iterable For(T o: X ){ … o …} POO-L3 H. Fauconnier7

8 Collection  On peut convertir une collection en tableau En tableaux de Object En tableaux d’objet du type paramètre de la collection  Il existe aussi une classe Collections qui contient des méthodes statiques utilesCollections

Collections…  Classe contenant des méthodes statiques: addAll, binarySearch, sort, copy, disjoint, frequency, max, min, reverse, rotate, shuffle, swap etc.. POO-L3 H. Fauconnier9

10 Set  Interface pour contenir des éléments différents (pas de duplication) Opérations ensemblistes SortedSet pour des ensembles ordonnés SortedSet  Implémentations: HashSet par hachage (performances) HashSet TreeSet arbre rouge-noir TreeSet LinkedHashSet ordonnés par ordre d’insertion LinkedHashSet

POO-L3 H. Fauconnier11 Set public interface Set extends Collection { // Basic operations int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //optional boolean remove(Object element); //optional Iterator iterator(); // Bulk operations boolean containsAll(Collection c); // sous-ensemble boolean addAll(Collection c); //optionnel- union boolean removeAll(Collection c); //optionnel- différence boolean retainAll(Collection c); //optionnel- intersection void clear(); //optionnel // Array Operations Object[] toArray(); T[] toArray(T[] a); }

POO-L3 H. Fauconnier12 Exemple: public static void chercheDoublons(String... st){ Set s = new HashSet (); for (String a : st) if (!s.add(a)) System.out.println("Doublon: " + a); System.out.println("il y a "+s.size() + " mots différents: " + s); } public static void chercheDoublonsbis(String st[]){ Set s=new HashSet (); Set sdup=new HashSet (); for(String a :st) if (!s.add(a)) sdup.add(a); s.removeAll(sdup); System.out.println("Mots uniques: " + s); System.out.println("Mots dupliqués: " + sdup); }

POO-L3 H. Fauconnier13 List  En plus de Collection: Accès par position de l ’élément Recherche qui retourne la position de l’élément Sous-liste entre deux positions  Implémentations: ArrayList LinkedList

POO-L3 H. Fauconnier14 List public interface List extends Collection { // Positional access E get(int index); E set(int index, E element); //optionnel boolean add(E element); //optionnel void add(int index, E element); //optionnel E remove(int index); //optionnel boolean addAll(int index, Collection c); //optionnel // recherche int indexOf(Object o); int lastIndexOf(Object o); // Itération ListIterator listIterator(); ListIterator listIterator(int index); // sous-liste List subList(int from, int to); }

POO-L3 H. Fauconnier15 Itérateur pour listes public interface ListIterator extends Iterator { boolean hasNext(); E next(); boolean hasPrevious(); E previous(); int nextIndex(); int previousIndex(); void remove(); //optional void set(E e); //optional void add(E e); //optional }

POO-L3 H. Fauconnier16 Exemple public static void swap(List a, int i, int j) { E tmp = a.get(i); a.set(i, a.get(j)); a.set(j, tmp); } public static void melange(List list, Random rnd) { for (int i = list.size(); i > 1; i--) swap(list, i - 1, rnd.nextInt(i)); }

POO-L3 H. Fauconnier17 Suite… public static List uneMain(List deck, int n) { int deckSize = deck.size(); List handView = deck.subList(deckSize - n, deckSize); List hand = new ArrayList (handView); handView.clear(); return hand; } public static void distribuer(int nMains, int nCartes) { String[] couleurs = new String[]{"pique","coeur","carreau","trèfle"}; String[] rank = new String[] {"as","2","3","4","5","6","7","8", "9","10","valet","dame","roi"}; List deck = new ArrayList (); for (int i = 0; i < couleurs.length; i++) for (int j = 0; j < rank.length; j++) deck.add(rank[j] + " de " + couleurs[i]); melange(deck,new Random()); for (int i=0; i < nMains; i++) System.out.println(uneMain(deck,nCartes)); }

POO-L3 H. Fauconnier18 Map  Map associe des clés à des valeurs Map Association injective: à une clé correspond exactement une valeur. Trois implémentations, comme pour set  HashMap, HashMap  TreeMap, TreeMap  LinkedHashMap LinkedHashMap Remplace Hash

POO-L3 H. Fauconnier19 Map public interface Map { V put(K key, V value); V get(Object key); V remove(Object key); boolean containsKey(Object key); boolean containsValue(Object value); int size(); boolean isEmpty(); void putAll(Map m); void clear(); public Set keySet(); public Collection values(); public Set > entrySet(); // Interface pour entrySet public interface Entry { K getKey(); V getValue(); V setValue(V value); }

POO-L3 H. Fauconnier20 Exemples public static void mapFreq(String... t) { Map m = new HashMap (); for (String a : t) { Integer freq = m.get(a); m.put(a, (freq == null) ? 1 : freq + 1); } System.out.println("Il y a: " + m.size() + " mots différents:\n"+m); }

POO-L3 H. Fauconnier21 Exemples public static void mapFreq(String... t) { Map m = new TreeMap (); for (String a : t) { Integer freq = m.get(a); m.put(a, (freq == null) ? 1 : freq + 1); } System.out.println("Il y a: " + m.size() + " mots différents:\n"+m); }

POO-L3 H. Fauconnier22 Exemples public static void mapFreq(String... t) { Map m = new LinkedHashMap (); for (String a : t) { Integer freq = m.get(a); m.put(a, (freq == null) ? 1 : freq + 1); } System.out.println("Il y a: " + m.size() + " mots différents:\n"+m); }

POO-L3 H. Fauconnier23 Queue  Pour représenter une file (en principe FIFO): Insertion: offer -add Extraction: poll - remove Pour voir: peek –element (retourne une valeur – exception)  PriorityQueue implémentation pour une file à priorité PriorityQueue

POO-L3 H. Fauconnier24 Interface Queue public interface Queue extends Collection { E element(); boolean offer(E e); E peek(); E poll(); E remove(); }

POO-L3 H. Fauconnier25 Exemple public static void compteur(int n) throws InterruptedException { Queue queue = new LinkedList (); for (int i = n; i >= 0; i--) queue.add(i); while (!queue.isEmpty()) { System.out.println(queue.remove()); Thread.sleep(1000); }

POO-L3 H. Fauconnier26 Exemple static List heapSort(Collection c) { Queue queue = new PriorityQueue (c); List result = new ArrayList (); while (!queue.isEmpty()) result.add(queue.remove()); return result; }

POO-L3 H. Fauconnier27 Des implémentations…  HashSet : implémentation de Set comme table de hachage. recherche/ ajout suppression en temps constant HashSet :  TreeSet : SortedSet comme arbre binaire équilibré: Recherche, ajout suppression en O(log(n)) TreeSet :  ArrayList : liste implémentée par des tableaux à taille variable: accès en O(1), ajout et suppression en O(n-i) (i position considérée) ArrayList :  LinkedList : liste doublement chaînée implémente List et Queue: accès en O(i) LinkedList :  HashMap : implémentation de Map par table de hachage: ajout suppression et recherche en O(1) HashMap :  TreeMap : implémentation de SortedMap à partir d'arbres équilibrés: ajout, suppression et recherche en O(log(n)) TreeMap :  WeakHashMap : implémentation de Map par table de hachage WeakHashMap :  PriorityQueue : tas à priorité. PriorityQueue :

Remarques…  Aux diverses interfaces correspondent des classes abstraites qui implémentent partiellement l'interface correspondante:  Exemple AbstractCollection Collection (iterator et size sont abstraits)  AbstractSet Set (extension abstaite) HashSet (Classe concrète) POO-L3 H. Fauconnier28

I/O packagePOO-L3 H. Fauconnier29 Comparaisons  Interface Comparable contient la méthode public int compareTo(T e) "ordre naturel"  Interface Comparator contient la méthode public int compare(T o1, T o2)

I/O packagePOO-L3 H. Fauconnier30 Quelques autres packages  System méthodes static pour le système: System entrée-sorties standard manipulation des propriétés systèmes utilitaires "Runtime" exit(), gc() …

I/O packagePOO-L3 H. Fauconnier31 Runtime, Process  Runtime permet de créer des processus pour exécuter des commande: exec Runtime  Process retourné par un exec méthodes Process destroy() exitValue() getInputStream() getOutputStream() getErrorStream()

I/O packagePOO-L3 H. Fauconnier32 Exemple  exécuter une commande (du système local) associer l'entrée de la commande sur System.in associer la sortie sur System.out.

I/O packagePOO-L3 H. Fauconnier33 Exemple class plugTogether extends Thread { InputStream from; OutputStream to; plugTogether(OutputStream to, InputStream from ) { this.from = from; this.to = to; } public void run() { byte b; try { while ((b= (byte) from.read()) != -1) to.write(b); } catch (IOException e) { System.out.println(e); } finally { try { to.close(); from.close(); } catch (IOException e) { System.out.println(e); }

I/O packagePOO-L3 H. Fauconnier34 Exemple suite public class Main { public static Process userProg(String cmd) throws IOException { Process proc = Runtime.getRuntime().exec(cmd); Thread thread1 = new plugTogether(proc.getOutputStream(), System.in); Thread thread2 = new plugTogether(System.out, proc.getInputStream()); Thread thread3 = new plugTogether(System.err, proc.getErrorStream()); thread1.start(); thread2.start(); thread3.start(); try {proc.waitFor();} catch (InterruptedException e) {} return proc; } public static void main(String args[]) throws IOException { String cmd = args[0]; System.out.println("Execution de: "+cmd); Process proc = userProg(cmd); }