Ce document est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.
2. Mise en place
Se référer au paragraphe Mise en place du cours Java EE.
3. Manipulation de tableaux
Implémenter une méthode qui accepte deux paramètres m
et n
de type int
et qui crée une matrice de dimensions m
x n
.
La valeur de la cellule de coordonnées [i][j]
est i + j
.
Par exmple, voici le tableau résultat de la méthode avec les paramètres 4
et 3
:
i = 0 | i = 1 | i = 2 | i = 3 | |
---|---|---|---|---|
j = 0 |
0 |
1 |
2 |
3 |
j = 1 |
1 |
2 |
3 |
4 |
j = 2 |
2 |
3 |
4 |
5 |
4. Manipulation de listes
4.1. Itération
4.1.1. Somme
Soit une liste d’entiers.
Implémenter une méthode sum()
qui retourne la somme des éléments de la liste.
4.1.2. Groupement
Implémenter une méthode group()
qui retourne les éléments d’une liste groupés par type.
Le groupement se fait selon les règles suivantes :
-
Le premier groupe comprend les chaînes de caractères,
-
Le deuxième groupe les éléments de type
Integer
, -
La troisième tous les autres.
Chaque groupe est géré par un type Collection
.
Par exemple, avec la liste de la section suivante, le résultat doit être une Collection
qui comprend :
-
["banana", "apple", "orange"]
-
[2, 1, 3]
-
[null, java.lang.Object@cafebabe, Tue Aug 22 15:18:21 CEST 2017]]
4.2. Comparateurs
Voici un échantillon de code qui pourra être utilisé comme test dans les exercices de cette section :
List list = Arrays.asList(2, 1, "banana", null, "apple", "orange",
3, new Object(), new java.util.Date());
4.2.1. Tri avec un comparateur
Implémenter une méthode sortWithSetComparator()
qui trie une liste avec un comparateur explicite en utilisant l’ordre suivant :
-
Les entiers, puis dans l’ordre naturel des entiers,
-
Les chaînes de caractères, puis dans l’ordre naturel des chaînes de caractères,
-
Les éléments qui ne sont pas de type
Object
, -
Les éléments de type
Object
, -
Enfin, les valeurs
null
.
Avec la liste échantillon, le résultat doit être le suivant :
[1, 2, 3, "apple", "banana", "orange", Tue Aug 22 15:18:21 CEST 2017, java.lang.Object@cafebabe, null]
.
4.2.2. Chaînage de comparateurs
Soit le code suivant :
public class Person {
private final String firstName;
private final String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
// Getters and setters
}
public class ByFirstNameComparator implements Comparator { ... }
public class ByLastNameComparator implements Comparator { ... }
En réutilisant les classes existantes, créer une implémentation de comparateur ByLastNameThenFirstNameComparator
qui compare deux instances de Person
:
-
Par leur attribut
lastName
, -
Puis en cas d’égalité par leur attribut
firstName
.
4.3. Tri par ordre naturel - système de fichiers
Implémenter une méthode listDirectory()
qui accepte en paramètre le chemin vers un répertoire et retourne la liste triée des enfants de ce répertoire.
-
Appeler la méthode en passant un répertoire avec un nombre conséquent d’enfants.
-
Constater l’orde utilisé.
-
Chercher la confirmation à l’aide de la JavaDoc.
5. Manipulation de sets
Soit la classe Person
suivante :
public class Person {
private final String name;
private final String avs;
public Person(String name, String avs) {
this.name = name;
this.avs = avs;
}
public static void main(String... args) {
Person p1 = new Person("John Doe", "756-1234-5678-97");
Person p2 = new Person("John Doe", "756-1234-5678-97");
Person p3 = new Person("John Amden", "111-11-111-113");
Set persons = new HashSet();
persons.add(p1);
persons.add(p2);
persons.add(p3);
System.out.println(persons.size()); (1)
System.out.println(p1.equals(p2)); (2)
}
}
En surchargeant uniquement les méthodes adéquates dans la classe Person
, faire en sorte que le résultat de l’exécution du code précédent soit :
2 (1)
true (2)
6. Manipulation de dictionnaires
Soit le code suivant :
public class Wrapper {
private final int id;
public Wrapper(int id) {
this.id = id;
}
@Override
public boolean equals(Object o) {
return o instanceof Wrapper && this.id == ((Wrapper) o).id;
}
@Override
public int hashCode() {
return 1; (1)
}
public static void main(String... args) {
Map map = new HashMap(); (2)
int limit = 10_000_000; (3)
for (int i = 0; i < limit; i++) {
Wrapper w = new Wrapper(i);
map.put(w, w);
}
}
-
Expliquer le problème posé par le code. Le corriger.
-
Quels sont le(s) paramètre(s) à passer dans le constructeur de la
HashMap
pour optimiser le temps d’exécution du code ? Justifier. -
En quoi la réponse à la question précédent diffère si la valeur de la variable
limit
n’est pas connue ?