Liste générique, auto-boxing et générics
Exercice 1 - Les listes chaînées génériques
Le but de cet exercice est de changer l'implantation
de fr.umlv.datas.Link et de fr.umlv.datas.LinkedLink
pour obtenir des listes génériques.
Le plus simple pour obtenir des structures de données génériques en Java
consiste à utiliser java.lang.Object comme type permettant
de stocker les données.
-
Changer les méthodes add() et get()
pour que celle-ci prenne en paramètre ou en type de retour un
Object.
Changer l'implantation en conséquence.
-
Que doit-on changer dans la méthode main de la
classe fr.umlv.datas.Main ?
Expliquer pourquoi un cast est nécessaire lorsque
l'on utilise la méthode get().
Exercice 2 - Auto-boxing et auto-unboxing
Nous allons maintenant voir comment marche le mécanisme qui
transforme tout type primitf en objet et vice-versa.
-
Que fait le code suivant :
Integer value=777;
int i=value;
Dans ce code, quelle instruction peut effectuer une allocation ?
PS: utiliser javap pour vous aider.
-
Qu'affiche le code ci-desssous ?
public static boolean isEquals(Integer i,Integer j) {
return i==j;
}
public static void main(String[] args) {
System.out.println(isEquals(3,3));
System.out.println(isEquals(128,128));
}
Expliquer ?
Nous allons maintenant utiliser le mécanisme de boxing
avec la liste chaînée générique.
-
Ecrire une classe fr.umlv.datas.PrimitiveTest ayant
une méthode main qui ajoute des entiers
dans la liste chaînée.
-
Le code suivant ne marche pas que doit-on faire ?
LinkedList list=new LinkedList();
list.add(3);
int i=list.get(0);
Exercice 3 - Utilisation de la classe ArrayList
Le but de cet exercice est la manipulation de la
classe java.util.ArrayList et la notions de generics.
-
Extraire l'interface fr.umlv.datas.IList de
la classe fr.umlv.datas.LinkedList.
Faire en sorte que fr.umlv.datas.LinkedList implante
fr.umlv.datas.IList.
-
Changer la classe fr.umlv.datas.Main pour introduire
le type fr.umlv.datas.IList là où c'est possible.
-
Regarder la javadoc de java.util.ArrayList et écrire
la classe fr.umlv.datas.DynamicList qui implante l'interface
fr.umlv.datas.IList en utilisant un java.util.ArrayList
pour stocker les éléments.
-
Quel est l'intérêt d'avoir une interface, ici, fr.umlv.datas.IList
et deux implantations fr.umlv.datas..DynamicList et
fr.umlv.datas.LinkedList ?
-
Changer la classe fr.umlv.datas.Main pour que celle-ci prenne
en paramétre une chaîne de caractères. Si cette chaîne de caractères est
"linked" alors le main doit utiliser la classe fr.umlv.datas.LinkedList
pour les tests sinon si la chaîne de caractères est "dynamique" le main doit utiliser
la classe fr.umlv.datas..DynamicList.
-
Changer l'interface fr.umlv.datas.IList et les classes
java.util.DynamicList et fr.umlv.datas.LinkedList
pour que celle-ci soit paramètrées.
Réécrire la classe fr.umlv.datas.Main.
Rémi Forax - Université de Marne La Vallée