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);