09/06/2014 Chapitre 7: Les collections Définition Les classes: – Vector – ArrayList L'interface: – Comparable POO \ N.EL FADDOULI 104 Les collections: Définition Une collection est un objet unique permettant de gérer un groupe d'objets j appelés pp éléments de la collection et q qui p peuvent être de types différents. L'API Collections contient des interfaces regroupant des les objets sous l'une des formes: – Collection: groupe des objets appelés éléments; la mise en œuvre détermine s'il existe un classement spécifique et si les doublons sont autorisés. – Ensemble: collection non ordonnée; les doublons ne sont pas autorisés. autorisés – Liste: collection ordonnée, les doublons sont autorisés POO \ N.EL FADDOULI 105 1 09/06/2014 Les collections: Tableau (taille fixe) Un tableau est crée via une référence déclarée comme suit: TypeDuTableau [ ] NomDuTableau; Exemple: int [ ] T; On crée un tableau avec l'opérateur new en précisant sa taille NomDuTableau = new TypeDuTableau [ Taille ]; Exemple: T = new int [ 5 ]; Un tableau est un objet qui possède des attributs et sur lesquels on peut appliquer des méthodes. Exemple: L'attribut length représente la taille du tableau. La méthode toString() donne une présentation textuelle du tableau. Possibilité de déclaration et initialisation Exemple: int [ ] T = { 23, 45, 9 }; POO \ N.EL FADDOULI 106 Les collections: Tableau (taille fixe) Exercice: Ecrire un programme (main) pour: - Lire la taille effective N d'un tableau T d'entiers - Créer le tableau T. - Lire N entiers dans le tableau T - Afficher les éléments de T du dernier au premier. N.B: Utiliser la classe Lire pour lire les N entiers. POO \ N.EL FADDOULI 107 2 09/06/2014 Les collections: Vector (taille dynamique) Un vecteur est un objet de type Vector (classe hérité de Java 1.0) Il est dynamique: il permet de gérer n'importe quel nombre d'objets ((comme une liste chaînée)) Création: Vector <Classe_Mère> t = new Vector < Classe_Mère > (); Quelques méthodes: add (X) : Ajoute un élément X en fin de liste add (i, X) : Insère un élément X dans la liste, à l’indice i clear () : Supprime tous les éléments de la liste elementAt (i) : Retourne l’élément stocké à l’indice i remove (i) : Supprime l'élément d'indice i removeRange (i, j): Supprime les éléments dont les indices [ i , j [ size () : Retourne le nombre d'éléments de la liste .... La classe Vector est dans le package java.util : import java.util.*; POO \ N.EL FADDOULI 108 Les collections: Vector (taille dynamique) Exemple: import java.util.* ; class Etudiant { private int code; private String nom; public Etudiant(int a, String b){code=a; nom=b;} public String toString(){return code+" "+nom;} } public class TestVector { public static void main(String [ ] args) { Vector L = new Vector(); Vector <Object> L = new Vector <Object>(); L.add(3); // stocker des éléments hétérogènes dans le vecteur L.add(5.67); ( ) Etudiant e=new Etudiant(234, "Amine"); Optionnel L.add(e); L.add ( new Etudiant(100, "Said") ) ; } for(int i=0;i<L.size(); i++) System.out.println( L.elementAt(i).toString() ); } POO \ N.EL FADDOULI 109 3 09/06/2014 Exercice Reprendre la classe Formes pour : – Utiliser un attribut p privé F q qui est un vecteur de type yp Forme. – Enlever l'attribut privé N de type entier (taille maximale de F) et l'attribut privé R de type entier (taille effective de F)) – Revoir les constructeurs et les méthodes de la classe. POO \ N.EL FADDOULI 110 Les collections: ArrayList ArrayList est une classe qui implémente l'interface List Permet de gérer n'importe quel nombre d'objets dans une liste chaînée. Création: Vector <Classe_Mère> t = new Vector < Classe_Mère > (); Quelques méthodes: add (X) : Ajoute un élément X en fin de liste add (i, X) : Insère un élément X dans la liste, à l’indice i clear () : Supprime tous les éléments de la liste get(i) : Retourne l’élément stocké à l’indice i remove (i) : Supprime l'élément d'indice i removeRange (i, j): Supprime les éléments dont les indices [ i , j [ size () : Retourne le nombre d'éléments de la liste .... La classe ArrayList est dans le package java.util : import java.util.*; POO \ N.EL FADDOULI 111 4 09/06/2014 Les collections: ArrayList Exemple: import java.util.*; public class ListExemple { public static void main(String []args) { List l = new ArrayList (); l.add("Un"); l.add("Deux"); l.add(3); l.add(new Integer(4)); l.add("Deux"); System.out.println( l ); // ou System.out.println(l.toString()); }} Résultat: [Un, Deux, 3, 4, Deux] POO \ N.EL FADDOULI 112 Les collections: Classements des éléments Les interfaces Comparable et Comparator sont utiles pour classer les collections. Ils permettent de comparer les éléments d d'une une collection. collection L'interface Comparable fait partie du package java.Lang. Lorsqu'on crée une classe, la JVM n'a aucun moyen de déterminer l'ordre envisagé pour les objets de cette classe. L'implémentation de l'interface Comparable permet d'ordonner les objets d'une classe. Les classes Byte, Long, String, Date, Float... implémentent l'interface Comparable. Comparable La méthode statique sort de la class Collections permet de trier une liste passée en argument. Pour permettre de comparer les objets d'une classe, cette dernière doit implémenter la méthode compareTo de l'interface Comparable. POO \ N.EL FADDOULI 113 5 09/06/2014 Les collections: Classements des éléments Exmeple: import java.util.* ; class Etudiant implements Comparable { private int code; private String nom; public Etudiant(int a, String b){code=a; nom=b;} public String toString() {return "Code:"+code+" Nom: "+nom;} public int compareTo(Object e) { Etudiant o = (Etudiant) e; if(this.code==o.code) if(this.code o.code) return 0; // égaux if (this.code < o.code) return -1; // this est inférieur à e return 1; // this est supérieur à e } } POO \ N.EL FADDOULI 114 Les collections: Classements des éléments public class TestComparable { public static void main(String [ ] args) { Etudiant e1 = new Etudiant(350, "Amine"); Etudiant e2 = new Etudiant(300, "Khalid"); if(e1.compareTo(e2)==0) System.out.println( "Egaux " ); else if(e1.compareTo(e2) 1) if(e1.compareTo(e2)==1) System.out.println( "e1 > e2" ); else System.out.println( "e1 < e2" ); } } POO \ N.EL FADDOULI 115 6 09/06/2014 Les collections: Classements des éléments public class TestComparable { public static void main(String [ ] args) { List A = new ArrayList(); A.add(new Etudiant(500, "Amine")); A.add( new Etudiant(300, "Khalid")); A.add( new Etudiant(400, "Omar")); System.out.println("Avant le tri: "+ A ); Collections.sort(A); System.out.println("Après le tri: "+ A ); } Résultat Avant le tri: [500 Amine, 300 Khalid, 400 Omar] Après le tri: [300 Khalid, 400 Omar, 500 Amine] POO \ N.EL FADDOULI 116 7