Vous êtes sur la page 1sur 12
Programmation Orienté Objet Les collections Structures de données En Java, il existe 3 sortes de structures de données — Les tableaux : Structure de taille fixe, accés direct aux éléments — Les Collections : Structure modifiable, différents algorithmes de stockage Les Map : Structure modifiable, stocke des couples clé -> valeur 1. Tableau Un tableau est un ensemble indexé de données d'un méme type. L'utilisation d'un tableau se décompose en trois parties — Création du tableau ; — Remplissage du tableau ; — Lecture du tableau. 1.1. Création du tableau Un tableau se déclare et s‘instancie comme une classe : monTableau[ ] = new int[101; ou ] monTableau ~ new Lopérateur [] permet d'indiquer qu'on est en train de déclarer un tableau. Dans instruction précédente, nous déclarons un tableau d’entiers (int, integer) de taille 10, c'est-4-dire que nous pourrons stocker 10 entiers dans ce tableau. Si [ ] suit le type, toutes les variables déclarées seront des tableaux, alors que si [] suitle nom de la variable, seule celle-ci est un tableau : premierTableau, deuxiemeTableau; oat troisiemeTableau[], variable; wided.degachi@gmail.com 1 Programmation Orienté Objet Dans ces quatre déclarations, seule variable n'est pas un tableau. 1.2, Remplissage d’un tableau Une fois le tableau déclaré et instancié, nous pouvons le remplir int [] monTableau = new int [10]; monTableau[5] = 2 Llindexation démarre a partir de 0, ce qui veut dire que, pour un tableau de N éléments, la numérotation va de 0. N-1, Dans I'exemple ci-dessus, la 6** case contient donc la valeur 23, Nous pouvons également créer un tableau en énumérant son contenu : int [] monTableau 8, 6, 0,7) Ce tableau contient 5 éléments. Lorsque la variable est déja déclarée, nous pouvons lui assigner d'autres valeurs en utilisant I'opérateur ne monTableau = new int[]{11,13,17,19,23,29 1.3. Lecteur d'un tableau Pour lire ou écrire les valeurs d'un tableau, il faut ajouter I'indice entre crochets ([ et ]) a la suite du nom du tableau int [] monTableau ; int nb; monTableau[5] = 2 23571 nb = monTableau(4]; Liindice 0 di signe le premier élément du tableau. Lattribut length d'un tableau donne sa longueur (le nombre d’éléments). Donc pour un tableau nommé montablesu l'indice du dernier élément est mon?ab eau. length-* wided.degachi@gmail.com 2 Programmation Orienté Objet Ceci est particuligrement utile lorsque nous voulons parcourir les éléments d'un tableau, for (int i < monTableau. length; i++) int element monTableau [i]; // traitement 14. Les tableaux en Java Java 5 fournit un moyen plus court de parcourir un tableau, L'exemple suivant réalise le traitement sur monTableau for (int element : monTableau) Attention néanmoins, la variable element contient une copie de nontabieauli). Avec des tableaux contenant des variables primitives, toute modification de element n’aura aucun effet sur le contenu du tableau. // Vaine tentative de remplir tous les éléments du tableau avec la for(int element : monTableau) element. bonne méthode i “interface Collection ita ' ' interac ! ! SortedMtan <= List Set ~intartace=> Gortesset 2. List Cette interface est implémentée par un certain nombre de collections, et garantit que ces classes implémenteront l'ensemble des méthodes. Elle dérive de l'interface Collection, Les éléments sont indexés (i.e, numérotés de la méme fagon qu'un tableau est indicé). Type | Méthode Réle boolean | add{int index, Object 0) Ajouter un objet & index indiqué. boolean | addAll(int index, Collection c) | Ajouter tous les objets d'une autre collection a l'index indiqué. Object [ get(int index) Retourner objet a index indiqué wided.degachi@gmail.com 5 Programmation Orienté Objet int indexOf(Object 0) Retourner le premier index de Tobjet indiqué, int TastindexOf(Object 0) Retourner le dernier index de Tobjet indiqué, Object _| remove(int index) Supprimer objet index indiqué Object | set(int index, Object o) Remplacer l'objet & lindex indiqué. Lobjet précédent est retourné. int sizeQ) Retourner le nombre d’éléments de Ia liste. List subList(int fromIndex, int | Retourner une sous-liste de celle-ci. tolndex) Pour l'implémentation, on peut utiliser des tableaux redimensionnables (ArrayList) ou des listes chainées (LinkedList), 2.2. Listes chainées (LinkedList) Cette classe implémente I'interface Listen chainant les éléments (liste doublement chainée). Les méthodes ajoutées sont : — void addFirst(Object 0) : Ajoute un élément en début de liste. — void addLast(Object 0) : Ajoute un élément en fin de liste = Object getFirst : Retourne I'élément en début de liste. — Object getLast() : Retourne I'élément en fin de liste. — Object removeFirst() : Supprime et retourne I'élément en début de liste. = Object removeLast() : Supprime et retourne I'élément en fin de liste. 2,3, Tableau redimensionnable (ArrayList) Cette classe est un tableau dont Ia taille croit lorsque des éléments sont ajoutés. existe tout un panel de méthodes fournies avec cet objet — add(): permet d'ajouter un élément ; — get(int index) : retourne I'élément a l'indice demandé ; = remove(int index) : efface l'entrée a l'indice demandé ; —_ isEmpty(): renvoie « vrai » si objet est vide ; wided.degachi@gmail.com Programmation Orienté Objet — removeAllQ) : efface toute contenu de l'objet ; = contains(Object element) : retourne « vrai » sil'élément passé en paramitre est dans l’ArrayList. 2.4, Tableau redimensionnable (Vector) Cette classe est un tableau dont la taille croit lorsque des éléments sont ajoutés. Cette classe implémente les méthodes de l'interface List et les suivantes — int indexOf(Object o,int index) : Retourne l'index de l'objet indiqué, en partant de l'index indiqué. — int lastIndexOf(Object o,int index): Retourne I'index de l'objet indiqué, en partant de I'index indiqué et en allant vers le début (index 0). — void setSize(int newSize) : Tronquer/Agrandir le vecteur & la taille indiquée. Différence entre Vector et ArrayList ArrayList et Vector sont les deux classes les plus utilisées dans le package collection de java et la différence entre Vector et ArrayList est une question posée trés fréquemment, Bien que c'est une question simple, il est important de connaitre dans quel cas on utilise Vector ou ArrayList, particuligrement quand vous étes entrain de travailler sur un grand projet. En fait, la classe Vector a été créée avant la classe ArrayList. ArrayList n'est pas synchronisée, ce qui veut dire que plusieurs threads peuvent yaccéder en méme temps. Par exemple, si un thread est entrain de réaliser une opération d'ajout dans ArrayList, il peut arriver qu'un autre thread est entrain d'effectuer une opération de suppression en paralléle dans un environnement multi-threads non synchronisé Par contre Vector est synchronisé. Cela garantie un usage sécurisé des threads dans un environnement concurrent et mutli-threads. Par exemple, si un thread est entrain d'effectuer une opération dans Vector, aucun autre thread ne peut accéder tant wided.degachi@gmail.com 7 Programmation Orienté Objet que le premier thread n'a pas terminé. Contrairement a ArrayList, seulement un seul thread peut effectuer une opération a la fois. La capacité de stockage des deux listes est extensible ou contractile, les concepteurs de java l'ont rendu dynamique pour maintenir un usage de stockage optimal, Cependant, chacune a sa méthode. ArrayList augmente par la moitié de sa tail je tandis que Vector double sa taille par défaut. Donc, quand utiliser Vector et ArrayList ? Cela dépend de vos besoins, si votre code fait la synchronisation des processus (threads), Vector serait le meilleur choix puisqu'il assure qu'un seul thread accéde a la collection ala fois. Les opérations de synchronisation consomment beaucoup de temps par rapport aux opérations non-synchronisées donc, si votre application doit s'exécuter plus vite et n'a pas besoin de synchronisation, ArrayList serait le bon choix, coté performance. Ce tableau résume les 5 différences majeures: ArrayList Vector ArrayList n'est pas synchronisé, Vector est synchronisé ArrayList incrémente 50% de sa taille | Vector incrémente 100%, cela veut dire le actuelle silenombre des éléments _| double de sa taille initiale si le nombre des dépassent sa capacité éléments dépassent sa capacité ArrayList a été introduit dans JDK 1.2. | Vector a été introduit dans JDK 1.0 Vector est lent parce qu'il est synchronisé. ArrayList es rapide parce qu'elle n'est. | Dans un environnement concurrent, il va pas synchronisé bloquer les autres processus & accéder jusqu’a que le premier thread autorise l'accés Vector utilise I'interface Enumeration pour parcourir les éléments mais, elle peut utiliser, Iterator aussi ArrayList utilise Iterator pour parcourir les éléments wided.degachi@gmail.com 8 Programmation Orienté Objet Exercice d’application Exercice 1: Quelle est le résultat de ces programmes ? 1. Programme 1 2. Programme 2 wided degachi@gmail.com Programmation Orienté Objet wided degachi@gmail.com Programmation Orienté Objet while(ithasNext(){ String str = itnext(); System.out.printIn(str); if(strequals("d")) itset("2"); 3 System.out.printin(list); while(it hasPrevious()) System.out.print(itprevious0); } + Exercice 2 : Collection contenant des noms de pays Soit la classe Pays caractérisée par son nom, le nom de sa capitale et le nombre des habitants. 1) Créer la classe Pays avec les constructeurs, les modificateurs, les accesseurs et la classe toString() et la méthode affiche() qui affiche les valeurs des attributs. 2) Créer un programme Java qui crée une collection (ArrayList) de noms de pays puis alimenter cette collection avec quelques valeurs et afficher la taille de la collection Exemple de résultat a obtenir > java CollPays La collection créée contient 4 pays ! 3) Compléter le programme pour afficher le contenu de la collection. Exemple de résultat 4 obtenir > java CollPays La collection créée contient 4 pays ! France Allemagne USA Chine wided.degachi@gmail.com 1 Programmation Orienté Objet 4) Trouver une méthode pour vider la collection et modifier votre programme pour afficher un message d'erreur lorsqu'elle est vide et afficher le contenu lorsqu’elle n'est pas vide, Exemple de résultat a obtenir > java CollPays Liste vide 5) Aprés avoir de nouveau alimenté votre liste de pays, modifiez le nom d'un pays et affichez de nouveau la liste des pays. Conseil : Pour modifier le nom, il faut supprimer un élément (remove) et en ajouter un autre (add) Remarque : ly a plusieurs méthodes pour ajouter ou supprimer des éléments dans une collection de type ArrayList, Choisissez celle que vous voulez. 6) Triez votre collection et ré-affichez la liste des pays. Pour trier notre collection, il faut utiliser la méthode «sort». Si vous regardez la documentation de la classe « ArrayList », vous ne trouvez pas cette méthode Mais allez voir la documentation de la classe « Collections » : cette méthode y est présente. Et par chance, une « ArrayList » est aussi une « collection ». Pour le moment, utilisons la syntaxe suivante « Collections.sort(uneArrayList) » pour trier une ArrayList. Exercice 3 : Créer un tableau de 10 rectangles différents et un Vector de carré, wided.degachi@gmail.com 2

Vous aimerez peut-être aussi