Académique Documents
Professionnel Documents
Culture Documents
Sommaire
Structures de données dynamiques ....................................................................................................................................... 2
Listes ....................................................................................................................................................................................... 3
Caractéristiques communes entre un tableau et une liste ............................................................................................. 3
Différences entre un tableau et une liste ....................................................................................................................... 3
Boucler sur une liste............................................................................................................................................................ 5
Comment parcourir et afficher une liste avec un for ? ................................................................................................. 6
Et avec un for each ? ................................................................................................................................................... 6
ArrayList vs tableaux : quoi choisir ? ......................................................................................................................... 6
Piles ......................................................................................................................................................................................... 7
Pile → LIFO (Last In, First Out) ............................................................................................................................................ 8
Stack (Les piles en Java) ...................................................................................................................................................... 9
Files (FIFO → First In, First Out) ............................................................................................................................................ 11
Files (FIFO → First In, First Out) ........................................................................................................................................ 12
LinkedBlockingQueue (Les files en Java) .................................................................................................................... 13
Comment choisir la structure à utiliser ? .............................................................................................................................. 14
.toString() ...................................................................................................................................................................... 16
Exemple pour une classe Cercle qu’on aurait écrit:...................................................................................................... 17
Attention : ..................................................................................................................................................................... 17
1
Mathieu Grenon et des professeurs d’informatique 420-202-RE
Le package java.util inclut plusieurs classes pour traiter des ensembles de données de taille variable (« collections »)
→ structures dynamiques.
Les structures que nous verrons en classe sont les piles, les files et les listes
(il y en a d'autres).
Ce sont des structures génériques – servent à stocker des objets de n’importe quel type (String… Voiture…
Personne… Bijou… )
2
Mathieu Grenon et des professeurs d’informatique 420-202-RE
Listes
La liste est simple à comprendre et très flexible. Elle permet (souvent) de remplacer avantageusement les tableaux en
Java.
Liste Tableau
Les éléments sont placés séquentiellement Les éléments sont placés séquentiellement
On peut accéder à n’importe quel élément à l’aide de sa On peut accéder à n’importe quel élément à l’aide de sa
position dans la liste. position dans le tableau.
Différences entre un tableau et une liste
Liste Tableau
La liste a une taille variable, qui peut changer en cours Le tableau a une taille fixe, connue d’avance.
d’exécution.
Enlever un élément au centre d’une liste ne crée pas de Enlever un élément au centre du tableau crée un trou dans
trou. le tableau.
Je peux insérer un nouvel élément entre deux éléments Je ne peux pas insérer un élément entre deux éléments
existants. existants (à moins de le programmer moi-même, ce qui
n’est vraiment pas idéal).
Une List en Java est déclarée comme interface. Sans rentrer dans les détails (c’est de la matière qui sera abordée en 3e
session), il faut juste se rappeler qu’à l’instar des classes abstraites, on ne peut pas instancier List.
On a dit que les listes servent souvent à remplacer les tableaux. Voici comment on représente graphiquement un
tableau et une liste qui contiendrait les mêmes Integer :
66 42 1 -7 33
ArrayList de taille non significative qui contient chacun des entiers suivants les uns à la suite des autres :
66 → 42 → 1 → -7 → 33
3
Mathieu Grenon et des professeurs d’informatique 420-202-RE
4
Mathieu Grenon et des professeurs d’informatique 420-202-RE
System.out.println(liste.get(1)); // Résultat?
liste.remove(2);
System.out.println(liste.get(2)); // Résultat?
liste.add("Rose");
System.out.println(liste.indexOf("Bleu")); // Résultat?
System.out.println(liste.size()); // Résultat?
}
Réponses :
Rouge
Jaune
0
4
Remarquez qu’on indique le type de données de l’ArrayList à l’aide de crochets <>. Ainsi il n’est pas possible
d’insérer des éléments d’autres types dans cette liste, sauf s’il y a une relation d’héritage (si le type de la superclasse est
utilisé à la création de la liste, on peut y insérer des objets créés à l’aide d’une de ses sous-classes.)
5
Mathieu Grenon et des professeurs d’informatique 420-202-RE
Exemple
Afficher tous les éléments d’une liste pendant qu’on la vide :
while (!liste.isEmpty()) {
System.out.println("Élément enlevé:" + liste.remove(0));
}
Évidemment, si on n’a pas besoin d’afficher chaque élément, ceci est plus facile et rapide :
liste.clear();
Lorsque vous ne connaissez pas d'avance le nombre d'éléments à stocker en mémoire, ou que le nombre d'éléments
peut être variable lors de l'exécution d'un programme donné, il est souvent préférable d'utiliser une liste plutôt qu'un
tableau.
6
Mathieu Grenon et des professeurs d’informatique 420-202-RE
Piles
C'est une "liste" qui suit une logique particulière dans son utilisation. Nous allons débuter l'explication par un exemple
simple :
Histoire vécue d'un plongeur dans une pizzeria de quartier un certain soir d'automne de pleine lune
C'était un soir de pleine lune, un certain samedi soir d'automne. Une belle soirée chaude, une des dernières de l'année
probablement avant le froid inévitable de l'hiver qui allait frapper à nos portes. Tout le monde en profitait, dans les
restos, dans les bars, dans les salles de bingo, vraiment tout le monde savourait les derniers instants qui ne sauraient
durer.
Tout le monde?
Et bien non. Un jeune homme, musclé et ténébreux, travaillait dans une petite pizzeria
de quartier, et maugréait devant sa pile de vaisselle en hurlant de désespoir. Et alors
qu'il voyait sa pile d'assiettes baisser à force de frotter et de frotter, on lui apportait
toujours de nouvelles assiettes à laver. Et encore des nouvelles. Et d'autres encore...
Mais quand cela va-t-il finir ??
Il n'y en a pas. Mais s'il y en avait une, elle serait certainement songée et pertinente.
7
Mathieu Grenon et des professeurs d’informatique 420-202-RE
Les Assiette ne se lavent pas dans n'importe quel ordre. Non monsieur! Le plongeur musclé et ténébreux prend
toujours l'Assiette sur le dessus de la pile pour la nettoyer. Et prend la prochaine ensuite. Si d'autres Assiette
s'ajoutent entretemps, c'est encore celle sur le dessus qu'il prendra pour la nettoyer (est-ce que je vous ai dit qu'il était
musclé et ténébreux?).
C'est le principe d'une Pile (LIFO): on peut seulement ajouter des nouveaux éléments sur le dessus de la pile, et on peut
seulement retirer le dernier élément qui a été ajouté. Précisons qu'on peut enlever autant d'élément qu'on veut, mais
seulement un à la fois et toujours en partant du dessus de la pile.
Maintenant qu'on comprend tous bien ce qu'est une pile (oui, même le gars dans le fond qui ronfle un peu), comment
on utilise ça concrètement une pile en Java?
8
Mathieu Grenon et des professeurs d’informatique 420-202-RE
.garocher()
.ovni()
9
Mathieu Grenon et des professeurs d’informatique 420-202-RE
System.out.println(pile.isEmpty());
pile.push("Bleu");
pile.push("Blanc");
pile.push("Violet");
couleur = pile.pop();
System.out.println(couleur); // Résultat ?
pile.push("Vert");
System.out.println(pile.size()); // Résultat ?
System.out.println(pile.pop()); // Résultat ?
System.out.println(pile.pop()); // Résultat ?
System.out.println(pile.pop()); // Résultat ?
}
Réponses :
true
Violet
Violet
3
Vert
Blanc
Bleu
10
Mathieu Grenon et des professeurs d’informatique 420-202-RE
Histoire vécue d'un gars et de sa date dans une pizzeria de quartier un certain soir d'automne de pleine lune
C'était un soir de pleine lune, un certain samedi soir d'automne. Une belle soirée chaude, une des dernières de l'année
probablement avant le froid inévitable de l'hiver qui allait frapper à nos portes. Tout le monde en profitait, dans les
restos, dans les bars, dans les salles de bingo, vraiment tout le monde savourait les derniers instants qui ne sauraient
durer.
Tout le monde?
Et bien non. Un jeune homme, musclé et ténébreux, avait tout organisé pour que sa date se passe super bien. Tout
d'abord il irait avec une jolie demoiselle au petit resto du coin. Ensuite il irait se promener sur le bord de la
Rivière-des-Mille-Îles main dans la main avec celle qu'il désirait depuis plusieurs mois déjà, pour ensuite finir ça à la
maison autour d'une partie de Super Smash Bros. Le plan parfait.
Malheureusement, tout le monde s'était donné le mot pour arriver au restaurant en même temps. En fait, 5 minutes
avant lui. L'attente était interminable, il maugréait devant la file de personnes qui attendaient devant eux, en hurlant de
désespoir.
Laisse faire le resto le grand, et la prochaine fois montre tout de suite à ta date comment t'es bon à Super Smash Bros.
Ça, ça va l'impressionner.1
1
Le prof ne saurait être tenu responsable des conséquences liées aux suggestions de sorties de couples.
11
Mathieu Grenon et des professeurs d’informatique 420-202-RE
Les Personne ne sont pas servies dans n'importe quel ordre. Non madame! Le restaurant accepte toujours la personne
qui attend en file depuis le plus longtemps, soit celle qui est le plus près de la porte. Et prend la prochaine ensuite. Et
ainsi de suite. Si d'autres Personne s'ajoutent entretemps à la fin de la file, c'est encore celle le plus près de la porte qui
sera admise (la Personne qui était arrivée en premier parmi toutes les Personne de la file).
C'est le principe d'une File (FIFO): on peut seulement ajouter des nouveaux éléments à la fin de la file, et on peut
seulement retirer le premier élément de la file. Précisons qu'on peut enlever autant d'élément qu'on veut, mais
seulement un à la fois et toujours en partant du début de la file.
Les derniers arrivés se
mettent à la fin de la file et
attendent leur tour.
12
Mathieu Grenon et des professeurs d’informatique 420-202-RE
Mais on ne peut pas accéder à un élément autre que celui en tête de la file!
Maintenant qu'on comprend tous bien ce qu'est une file (oui, même la fille dans le fond qui ronfle un peu), comment on
utilise ça concrètement une file en Java?
13
Mathieu Grenon et des professeurs d’informatique 420-202-RE
System.out.println(file.isEmpty());
file.offer("Bleu");
file.offer("Blanc");
file.offer("Violet");
couleur = file.poll();
System.out.println(couleur); // Résultat ?
file.offer("Vert");
System.out.println(file.size()); // Résultat ?
System.out.println(file.poll()); // Résultat ?
System.out.println(file.poll()); // Résultat ?
System.out.println(file.poll()); // Résultat ?
}
Réponses :
true
bleu
bleu
blanc
3
violet
vert
Piles et files : généralement quand on veut simuler une situation spécifique où des objets se comportent comme
des piles ou des files du monde réel…
➢ Ex. une pile de livres, une liste d’attente dans un système de soutien technique, etc.
14
Mathieu Grenon et des professeurs d’informatique 420-202-RE
15
Mathieu Grenon et des professeurs d’informatique 420-202-RE
.toString()
Toutes les classes en Java héritent de la classe Object, c'est-à-dire qu’ils partagent des attributs et des méthodes qui
sont définie dans cette classe parent :
Object
La classe Object contient plusieurs méthodes qu’on peut utiliser dans toutes les autres classes, telles que :
- .toString()
- .equals()
- Etc.
La méthode toString() retourne une chaîne de caractère qui indique ce que représente l’objet.
System.out.println(monObjet);
Au lieu de :
16
Mathieu Grenon et des professeurs d’informatique 420-202-RE
Comme on a dit, la méthode toString() existe pour tous les objets et toutes les classes… mais quand on définit nos
propres classes la méthode toString() ne sait pas quoi afficher exactement : il faut lui dire nous-même :
@Override
public String toString() {
return "Cercle de rayon = " + rayon;
}
}
Attention :
Remarquez que toString() ne fait pas l’affichage (println) elle-même! Elle retourne tout simplement une
« version String » de l’objet. À vous de décider ce que vous ferez, tel que :
17