Les collections - Université Lyon 2
Transcription
Les collections - Université Lyon 2
Les collections (1) API Java sur les collections Master Informatique 1ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin Objectif : Permet de stocker un ensemble de données. Tableaux statiques (int [] tab) peu performants â Collection = gestion dynamique Différents types de collections : Ensemble (Set) | Tableaux associatifs (Map) | Liste (List) public class Alcool { private double degre; private String nom; public Coktail melanger(JusDeFruit jus); } Les collections (2) 1. Les ensembles : • objets de même type • sans duplication â HashSet : non triée â TreeSet : triée Ex. : ensembles d alcools. Vin Porto Bière Vodka Bière Vin Porto Vodka Vin Porto Bière Vodka Chocolat Les collections (3) 2. Les listes : • objet de types différents • duplication possible â LinkedList : liste chaînée â ArrayList | Vector : tableaux Vin Porto Bière Vodka Chocolat Bière Vin Porto Vodka Vin Chocolat Bière Vin Porto Vodka Vin ∅ Les collections (4) 3. Les tableaux associatifs : • clefs / valeurs • clefs sans duplication â HashMap | TreeMap Trié Numéro de commande C1 V1 La classe Vector (1) Rappel : o liste d objets, non trié, avec duplication possible. Ci Vi 1. Gestion de la mémoire : • capacité de la liste (défaut : 10) • pas d incrémentation (défaut : 0) • augmentation de la capacité par le pas lorsque le Vecteur est plein. Trié 1 2 3 v … Bière Vin Porto Vodka Vin Chocolat v v v La classe Vector (2) Syntaxe : 2. Méthodes : ajout boolean est_ajoute = v.add(vin); Vector v = new Vector(); Vector v = new Vector(capacite); Vector v = new Vector(capacite, pas); v vin v.add(3, vin); NULL v v Vide v La classe Vector (3) vin vin 3. Méthodes : index Alcool a = (Alcool)(v.get(3)); a «vin» 12 v.set(vodka, 3); v v vodka vin La classe Vector (4) La classe Vector (5) 4. Méthodes : suppression • Parcourir un vecteur : boolean est_supprime = v.remove(vin); v for (int i=0; i<v.size(); i++) { Alcool a = (Alcool)(v.get(i)); System.out.println("Alcool " + i + " + a ); } vodka Alcool a = (Alcool)( v.remove(3)); v a «vodka» • Et mieux depuis Java 1.5 : 40 for (Alcool a : v) { System.out.println("Alcool " + i + " + a ); } La classe Vector (6) • En réalité, la classe Vector est déconseillée car deprecated La classe TreeSet (1) Rappels : o ensemble d objets de même type, triés et sans duplication. o peut comporter une instance null. Syntaxe : TreeSet t = new TreeSet(); • Utiliser à la place la classe ArrayList . t La classe TreeSet (2) La classe TreeSet (3) public class Alcool { public double degre; public String nom; les_alcools TreeSet les_alcools = new TreeSet(); les_alcool.add(vodka); public Coktail en_melangeant(JusDeFruit jus); } les_alcools vodka les_alcools vin Alcool vodka = new Alcool(); vodka.nom = "vodka"; vodka.degre= 40; Alcool porto = new Alcool(); porto.nom = "porto"; porto.degre= 18; «vin» 12 «vodka» 40 vodka les_alcool.add(porto); System.out.println(les_alcool.size()); 2 premier = les_alcool.first(); premier «vin» 12 dernier = les_alcool.last(); dernier «vodka» 40 porto «porto» 18 les_alcool.remove(vin); les_alcools les_alcools • Depuis Java 1.5 : vin vodka les_alcools vin porto vodka Iterator it=les_alcool.iterator(); while (it.hasNext()) { Alcool al = (Alcool)(it.next()); System.out.println(al.nom); } vodka Eviter le transtypage : les types génériques La classe TreeSet (4) les_alcool.add(vin); vin vodka les_alcool.add(vin); … main(…) { Alcool vin = new Alcool(); vin.nom = "vin"; vin.degre= 12; Affichage : Vin Porto Vodka Iterator ne connaît pas Alcool. mais it.next() renvoie un Object de l ensemble. ici, cet Object est un Alcool. (Alcool)(it.next()) modifie le type de it.next() de Object à Alcool. Vector<MaClasse> liste; (...) liste = new Vector<MaClasse>(100); (...) for (int i=0; i<liste.size(); i++) { MaClasse = liste.get(i); (...) } Exemple d interface (1) Question : comment le TreeSet sait-il trier les alcools ? Réponse : Il ne sait pas ; il faut donc le lui indiquer. Exemple d interface (2) public class Alcool implements Comparable { public double degre; public String nom; Solution : le TreeSet propose un contrat : Si une classe accepte de définir la méthode compareTo, le TreeSet s engage à trier les objets de cette classe. public Coktail en_melangeant(JusDeFruit jus) {…} public int compareTo(Object o) { Alcool a_comparer = (Alcool)o; if (degre < a_comparer.degre) return -1; else if (degre > a_comparer.degre) return 1; else return 0; } Contrat â interface Terme du contrat â méthodes à implémenter Exemple : interface comparable méthode compareTo(Object o) }