Listes

Une liste (ou séquence) est une collection ordonnée d'éléments. Il s'agit d'une structure de données abstraite, qui est donc représentée en Java par une interface : List<E>.

List<Float> liste = new LinkedList<Float>();
 
liste.add(2.1f);
liste.add(0.7f);
liste.add(13.0f);
 
for(Float f : liste) {
  System.out.println(f);
}
 
liste.add(1, 0.01f);
System.out.println(liste.get(2));

Chaque élément contenu dans la liste est associé à un indice qui est dérivé de l'ordre des éléments dans la liste. On peut donc insérer ou extraire des éléments à n'importe quelle position en précisant l'indice désiré. Lorsque l'on parcourt une liste par une boucle énumérative, les éléments sont rencontrés par ordre croissant d'indice.

Une liste peut contenir plusieurs fois le même élément, que ce soit exactement le même objet, ou seulement plusieurs objets de même valeur. Une liste n'est donc pas un ensemble (une autre structure de donnée abstraite).

Les concrétisations notables de cette interface que propose le langage Java sont ArrayList<E> et LinkedList<E>, qui utilisent respectivement un tableau ou une liste chaînée pour stocker les références aux éléments.

  1. Luminance. Écrivez une application qui ouvre une fenêtre montrant une série de 10 parallélogrammes de couleurs choisies aléatoirement. L'utilisateur peut cliquer sur une zone colorée pour la faire disparaître (les parallélogrammes restants se regroupent). On affichera la luminance de la couleur supprimée dans la console, le but pour l'utilisateur etant de sélectionner les couleurs par ordre décroissant de luminance.

    Le calcul de la luminance d'une couleur utilisera la formule 21×R + 72×V + 7×B.

    Remarque Incluez dans votre code au moins une boucle énumérative sur une liste (qui ait une véritable utilité).

  2. Chaîne. Écrivez une classe qui puisse se substituer à la classe que vous avez employé pour représenter une liste dans l'exercice précédent.

    Cette classe devra stocker ses éléments dans une liste chaînée. Elle contiendra les mêmes méthodes que celles dont vous avez eu besoin dans l'exercice précédent, de sorte qu'il suffise de changer seulement la déclaration et l'initialisation de la liste dans les fichiers du premier exercice pour qu'il fonctionne avec votre nouvelle classe.

  3. Tableau. Faites la même chose qu'à l'exercice précédent, mais avec une classe qui stocke ses éléments dans un tableau.

  4. Récursivité. Dans les classes des deux précédents exercices, faites disparaître toute trace de boucle.

  5. Réalisation. En temps normal, quand on substitue une liste par une autre, il n'est pas nécessaire de changer la déclaration de la liste car elle devrait être de type List<E>. Les classes du deuxième et troisième exercices n'héritent pas de List<E>, cependant, car nous n'avons pas redéfini assez de méthodes.

    Ajoutez à la classe du deuxième exercice toutes les méthodes nécessaires pour qu'elle puisse complètement réaliser List<E>.

retour à la page d'accueil

retour au sommet