Programmation Java
Master M2 TTT --- Feuille n° 5
Liste chaînée
On veut programmer des listes chaînées d'entiers sauvegardables.
Une liste chaînée est composée de cellules, chaque cellule
contenant une valeur et une référence sur la cellule suivante. La classe qui décrit chaque cellule s'écrit donc:
public class ListeChainee {
private int valeur;
private ListeChainee suivant;
//Constructeur, getter, setter, etc.
}
La liste chaînée elle-même est une suite de cellules dont la
première contient la taille de la liste et les suivantes les différentes valeurs (le champ suivant de la dernière cellule vaut null). La liste vide contient donc une seule cellule avec la valeur 0 et la liste
contient les trois valeurs 12, 99, et 37.
Compléter la classe ListeChainee avec
Une méthode void add(int x) qui ajoute l'élément x à la fin de la liste.
Une méthode boolean remove(int x) qui supprime la
première occurence de x dans la liste et retourne
true si une telle occurence existait.
Une méthode int size() qui retourne
le nombre d'éléments dans la liste.
Une méthode String toString() qui retourne une chaîne de caractères représentant toutes les valeurs de la liste.
Une méthode void save(String file) qui sauvegarde
la liste dans un fichier.
Une méthode static ListeChainee load(String file) qui
permet de recharger une liste sauvegardé par save.
Pourquoi cette méthode est-elle static ?
Une méthode Iterator<Integer> iterator() qui
retourne un itérateur permettant de parcourir les valeurs de la liste. La méthode remove de cet itérateur lancera toujours une UnsupportedOperationException. Que faut-il faire pour pouvoir écrire:
ListeChaine liste = new ListeChainee();
//...
for(int i : liste)
System.out.println(i*2);