programmation Java (école d'ingénieur) · Chapitre 12 · Exercice de TD
Méthodes génériques
Collections et génériques · niveau 2
Énoncé
Écrire deux méthodes génériques :
static <T> int compter(List<T> liste, T x) // compte les éléments égaux à x
static <T> void echanger(List<T> liste, int i, int j) // échange deux éléments
Pourquoi compter doit-elle utiliser equals et non == ? Tester avec une liste de chaînes et une liste d'entiers.
Corrigé
import java.util.ArrayList;
import java.util.List;
public class Exo10Generique {
static <T> int compter(List<T> liste, T x) {
int n = 0;
for (T e : liste) {
if (e.equals(x)) n++;
}
return n;
}
static <T> void echanger(List<T> liste, int i, int j) {
T tmp = liste.get(i);
liste.set(i, liste.get(j));
liste.set(j, tmp);
}
public static void main(String[] args) {
List<String> l = new ArrayList<>(List.of("a", "b", "a", "c", "a"));
System.out.println(compter(l, "a") + " " + compter(l, "z"));
echanger(l, 0, 3);
System.out.println(l);
System.out.println(compter(List.of(1, 2, 1), 1));
}
}
3 0
[c, b, a, a, a]
2
Les éléments de la liste sont des objets : == comparerait des références, et deux chaînes ou deux Integer de même valeur pourraient être des objets distincts. equals compare les valeurs. La même méthode sert pour toute liste : le type T est déduit à chaque appel (String, puis Integer).
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.