Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →