ICS4U

Accueil > Structures de données et algorithmes >

📚 Quelques structures de données et des classes Java qui s’en servent

Survol et attentes

Peut-être vous avez trouvé la taille fixe d’un tableau limitant. Ou possiblement vous aurez préférez liez deux données ensemble au lieu de créer deux tableaux parallèles.

La bonne nouvelle est que des structures de données autres que les tableaux existent et, entre autres, résolvent ces deux problèmes.

Définitions

Ceci est une courte introduction aux structures de données via deux classes utiles dans Java : ArrayList et HashMap. Plusieurs autres structures existent et vous pouvez, avec vos propres objets, en définir de nouvelles.

Choisir une bonne structure de données pour votre application peut simplifier énormément l’algorithme nécessaire pour traiter les informations. Les deux - structures de données et algorithmes - sont étroitement liés.

Représentations internes

Un tableau est une séquence continue de cellules en mémoire pour le même type de donnée :

tableau

Pour accéder aux éléments du tableau, on spécifie le nom de la variable (qui donne l’adresse du tableau) puis l’index (le nombre de pas à partir du début du tableau). Cela nous donne un accès direct à chaque élément via son index.

Une liste est une structure de données où l’information vient avec un ou deux pointeurs. Avec un pointeur, le pointeur donne l’adresse du prochain élément dans la liste. Avec deux pointeurs, un des pointeurs donne aussi l’adresse de l’élément précédent.

liste

Pour accéder aux éléments d’une liste, on doit faire une recherche ;(. Par contre c’est très simple et rapide d’ajouter ou de supprimer des valeurs : on modifie les pointeurs des éléments précédents et subséquents. Les informations peuvent aussi se trouver n’importe où en mémoire, pas nécessairement en cellules collées.

Une table de hachage associe une clé à une valeur. Toutes les valeurs se trouvent dans un tableau et la clé, qui peut être de n’importe quel type, est utilisée dans une fonction de hachage pour donner l’adresse en mémoire de la valeur.

table de hachage

On accède aux valeurs en donnant la clé, ce qui est pratique si on a plusieurs informations à associer et que l’ordre (l’index) dans le tableau n’est pas important. L’accès est direct, comme avec les tableaux.

Utilité

Structure Utilité typique Objets Java correspondant
Tableau Accès direct à une collection qui ne change pas de taille la notation [] sur un type
Liste Modification fréquente d’une série de valeurs, comme l’historique de navigation LinkedList
Table de hachage Accès direct à une valeur au moyen d’une autre valeur associée (la clé) HashMap, TreeMap

La classe ArrayList offre un tableau qui au une taille modifiable, ce qui surmonte la plus grande limitation des tableaux de base.

Déclarations des objets

Les classes Java définissent la structure des données et leur comportements, mais n’indique pas le type de valeurs qu’elles contiennent, contrairement à la notation pour les tableaux qui s’ajoutent directement au type.

Il faut donc spécifier le type d’Object entre des crochets pointus suivant le nom de l’objet. Le format est :

1
Structure<Type> nomDeVariable = new Structure<>();

Et voici quelques exemples :

1
2
3
4
5
ArrayList<Integer> values = new ArrayList<>();
LinkedList<String> pages = new LinkedList<>();

// associer le nom au numéro de téléphone
HashMap<String,Long> phoneBook = new HashMap<>();

Notez que values contient des nombres entiers, mais on a utilisé Integer comme type et non int. C’est parce qu’il faut passer une classe. Pour chaque type primitif, il y a une classe “enveloppe” associée (p. ex. int -> Integer, long -> Long) qui lui offre certaines valeurs et comportements additionnels tout en augmentant son intégration dans le reste du code Java.

Notez aussi que pour la déclaration du HashMap, il fallait passer deux types : le premier pour la clé et le deuxième pour la valeur.

Primitif Classe enveloppe
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double

Objectifs d’apprentissage

À la fin de cette leçon vous devrez être en mesure de :

Critères de succès

Notes

Notes additionnelles sur les structures de données Java

Exercices

ArrayList

HashMap