Keyboard shortcuts

Touchez ← ou → pour naviguer les chapitres

Touchez S ou / pour chercher dans le livre

Touchez ? pour afficher ce message

Touchez Esc pour masquer ce message

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é

StructureUtilité typiqueObjets Java correspondant
TableauAccĂšs direct Ă  une collection qui ne change pas de taillela notation [] sur un type
ListeModification frĂ©quente d’une sĂ©rie de valeurs, comme l’historique de navigationLinkedList
Table de hachageAccĂš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 :

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

Et voici quelques exemples :

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.

PrimitifClasse enveloppe
booleanBoolean
byteByte
charCharacter
shortShort
intInteger
longLong
floatFloat
doubleDouble

Objectifs d’apprentissage

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

  • DĂ©crire la structure interne d’un tableau, d’une liste et d’une table de hachage, notamment en identifiant les avantages et les cas d’utilisation typiques de chacune.
  • ReconnaĂźtre les diffĂ©rentes mĂ©thodes pour ajouter, enlever et accĂ©der aux Ă©lĂ©ments d’un ArrayList et d’un HashMap et de traverser les valeurs de chacun.

CritĂšres de succĂšs

  • Je suis capable d’utiliser des ArrayList et HashMap dans mes programmes pour simplifier la gestion de collections de donnĂ©es ou optimiser les performances.

Notes

Notes additionnelles sur les structures de données Java

Exercices

ArrayList

HashMap

© 2022-2025 David Crowley