Présentation Chaînage dynamique Retour sur les tableaux Allocation dynamique Liens entre les données Création de la classe Noeud Exemples
Chaînage dynamique Retour sur les tableaux [ ] Allocation dynamique Les tableaux en java sont statiques On ne peut pas augmenter ou diminuer le nombre de cases d’un tableau en cours d’exécution. Allocation dynamique Lorsqu’on crée un objet (new), l’espace mémoire est alloué en cours d’exécution. Nous pouvons libérer l’espace mémoire d’un objet en cours d’exécution. Nous pouvons conserver des données à l’aide d’un objet. Truc : Mettre les données dans des objets plutôt que dans un tableau.
Chaînage dynamique 1 5 7 9 11 15 2 17 8 Liens entre les données Dans un tableau statique les données sont consécutives en mémoire. Les objets ne sont pas consécutifs en mémoire. Tableau Objets 1 5 7 9 11 15 2 17 8 5 7 9 11 17 8 2 1 15
Chaînage dynamique 1 Lien 5 Lien 7 Lien Il faut prévoir un mécanisme pour faire le liens entre les objets pour simuler un tableau. Chaînage dynamique La stratégie est de créer une structure qui contient l’objet et un lien vers la donnée suivante. On appelle un nœud, la structure qui contient l’objet et le lien vers le suivant. 1 Lien 5 Lien 7 Lien
La classe Nœud : //Une classe interne et ainsi on peut accéder directement aux //attributs à partir de la classe parent. Public class Nœud{ //attributs, l’objet + le lien private Object element; private Nœud suivant; //constructeur public Nœud(Object element, Nœud suivant){ this.element = element; this.suivant = suivant; }
Chaînage dynamique 1 noeud 5 null Exemple : Nœud tableau; //insertion d’une donnée dans le tableau tableau = new Nœud(new Integer(1),null); //insertion d’une donnée à la suite Noeud nœud = new Nœud(new Integer(5),null); tableau.suivant = noeud; tableau noeud Enveloppeur (wrapper) 1 noeud 5 null
while(i != n && position != null){ position = position.suivant; i++; } Récupérer un élément dans le tableau (équivalent à tableau [n]) //Dans cet exemple, on ne lève pas d’exception si n invalide public Object getElement(int n){ //on crée un nœud qu’on place au début du tableau Nœud position = tableau; int i = 1; /On se déplace tant qu’on a pas trouvé ce qu’on cherche ou //qu’on a pas atteint la fin du tableau (null) while(i != n && position != null){ position = position.suivant; i++; } if(position != null) return position.element; return null;