La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Collections. POO-L3 H. Fauconnier2 Collections  types de données interfaces implémentations algorithmes  Interfaces:"— Transcription de la présentation:

1 Collections

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

3 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 :

4 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); }

5 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 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(); }

7 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 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

9 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 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

11 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); }

12 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); }

13 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

14 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); }

15 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 }

16 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)); }

17 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)); }

18 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

19 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); }

20 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); }

21 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); }

22 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); }

23 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

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

25 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); }

26 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; }

27 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 :

28 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

29 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)

30 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() …

31 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()

32 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.

33 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); }

34 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); }


Télécharger ppt "Collections. POO-L3 H. Fauconnier2 Collections  types de données interfaces implémentations algorithmes  Interfaces:"

Présentations similaires


Annonces Google