public class exo4<E> {
    private E element;
    private int frequence;

    // Constructeur
    public exo4(E element, int frequence) {
        this.element = element;
        this.frequence = frequence;
    }

    // Accesseur pour 'element'
    public E getElement() {
        return element;
    }

    // Modificateur pour 'element'
    public void setElement(E element) {
        this.element = element;
    }

    // Accesseur pour 'frequence'
    public int getFrequence() {
        return frequence;
    }

    // Modificateur pour 'frequence'
    public void setFrequence(int frequence) {
        this.frequence = frequence;
    }

    // Surcharge de la méthode toString()
    @Override
    public String toString() {
        return "Element: " + element + ", Frequency: " + frequence;
    }

    // Méthode main pour tester la classe
    public static void main(String[] args) {
        // Exemple d'utilisation avec un type String
        exo4<String> association1 = new exo4<>("Test", 5);
        System.out.println(association1);  // Affichera : Element: Test, Frequency: 5

        // Exemple d'utilisation avec un type Integer
        exo4<Integer> association2 = new exo4<>(10, 2);
        System.out.println(association2);  // Affichera : Element: 10, Frequency: 2

        // Modification des valeurs
        association1.setElement("Updated");
        association1.setFrequence(10);

        // Vérification de la modification
        System.out.println(association1);  // Affichera : Element: Updated, Frequency: 10
    }
}
