:: Enseignements :: ESIPE :: E4INFO :: 2014-2015 :: Java Avancé ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Exam de Java Avance |
Exercice 1 - BinaryTree 1
La classe
BinaryTree ci-dessous implantant un arbre binaire de recherche
n’est pas finie, on se propose de la terminer.
-
Avant de commencer, expliquer ce que veut dire static devant la
déclaration de la classe BinaryTreeNode.
-
Ecrire la méthode toString en faisant attention au cas particulier
de l'arbre vide.
-
Ecrire la méthode size qui compte le nombre de valeur à l'intérieur de arbre.
-
On souhaite écrire une méthode toSet qui renvoie les valeurs stockées dans l'arbre sous forme d'un Set.
Expliquer pourquoi la méthode renvoie un Set et pas une collection ou une liste.
Quelle est la signature de la méthode toSet sachant que la méthode doit renvoyer
un ensemble d'entier.
Indiquer le code de la méthode toSet.
-
On souhaite écrire une méthode forEach qui prend un java.util.function.Consumer
en paramètre et appel sa méthode accept pour chaque valeur de l'arbre.
Rappel l'interface Consumer est définie comme ceci
public interface Consumer<T> {
void accept(T t);
}
Quelle est la signature de la méthode forEach ?
Donner l'implantation de la méthode forEach.
-
On peut remarquer que l'on peut ré-écrire toSet avec forEach.
Indiquer le nouveau code de toSet.
-
De même, on peut ré-écrire la méthode size en utilisant la méthode
forEach.
Indiquer le nouveau code de size.
Exercice 2 - BinaryTree 2
On souhaite générifier la classe BinaryTree, on appelera cette classe
GenericBinaryTree
-
Nous avons besoin d'un ordre de comparaison entre les élements.
Rappelez en Java les deux façons de spécifier un ordre de comparaison
(qui correspondent aux interfaces java.lang.Comparable
et java.util.Comparator).
-
Pour la suite, on supposera que le constructeur prend en paramètre
un java.util.Comparator.
Indiquer les déclarations de la classe GenericBinaryTree,
du constructeur et des méthodes (add, forEach et toSet).
-
Si vous ne l'avez pas fait à la question précédente, re-vérifier la signature
de la méthode forEach(), il y a une une petite astuce.
-
On souhaite écrire une méthode contains qui permet de savoir
si un élement est dans l'arbre.
Indiquer la signature de la méthode contains.
Indiquer le code de la méthode contains sachant qu'il n'est pas nécessaire
de parcourir toutes les valeurs.
-
On souhaite maintenant écrire une méthode max.
Note: il n'est pas nécessaire de regarder tous les éléments.
-
On veut pouvoir faire des parcours de l’arbre binaire de façon variées.
Pour cela, on propose une méthode traverse qui prend trois lambdas.
Une qui agit avant la descente récursive, une qui agit entre les deux appels récursifs, et une troisième après les deux.
Indiquer la signature de la méthode traverse. On supposera que les lamdas de retourne rien.
Indiquer la code de la méthode traverse.
Ecrire à titre d'exemple les trois appels qui permettent de faire un affichage préfixe, infixe, suffixe.
-
On souhaite écrire une méthode iterator() qui renvoie un Iterator.
Expliquer pourquoi il est nécessaire d'utiliser une pile pour implanter l'itérateur.
Sachant que la classe java.util.ArrayDeque possède les méthodes classiques
push, pop et peek, indiquer le code de la méthode
iterator.
© Université de Marne-la-Vallée