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 1Programmation 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 2Programmation 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 5Programmation 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.comProgrammation 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 7Programmation 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 8Programmation Orienté Objet
Exercice d’application
Exercice 1: Quelle est le résultat de ces programmes ?
1. Programme 1
2. Programme 2
wided degachi@gmail.comProgrammation Orienté Objet
wided degachi@gmail.comProgrammation 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 1Programmation 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