import java.util.HashMap; // Importation de HashMap
import java.util.Map; // Importation de Map

public class exo3 {
    public static void main(String[] args) {
        // Exemple de tableau d'objets
        Object[] tableau = {1, "apple", 2, "banana", "apple", 3, 2, "banana", "banana"};
        
        // Appel de la méthode pour trouver l'élément le plus fréquent
        Object elementFrequent = trouverElementFrequent(tableau);
        
        // Affichage du résultat
        System.out.println("L'élément le plus fréquent est : " + elementFrequent);
    }

    public static Object trouverElementFrequent(Object[] tableau) {
        Map<Object, Integer> compte = new HashMap<>(); // Dictionnaire pour compter les occurrences
        int maxCount = 0; // Compteur maximal
        Object elementFrequent = null; // Élément le plus fréquent

        for (int i = 0; i < tableau.length; i++) {
            Object element = tableau[i];
            // Incrémenter le compteur pour l'élément actuel
            compte.put(element, compte.getOrDefault(element, 0) + 1);

            // Vérifier si cet élément a une fréquence plus élevée ou est le premier en cas d'égalité
            if (compte.get(element) > maxCount || (compte.get(element) == maxCount && elementFrequent == null)) {
                maxCount = compte.get(element);
                elementFrequent = element;
            }
        }

        return elementFrequent; // Retourner l'élément le plus fréquent
    }
}

/*
mportations :

    HashMap pour stocker les occurrences des éléments.
    Map pour la déclaration de la variable.

Méthode principale :

    Un tableau d'exemple tableau est créé contenant différents types d'objets.
    La méthode trouverElementFrequent est appelée pour obtenir l'élément le plus fréquent.

Méthode trouverElementFrequent :

    Crée un HashMap pour compter les occurrences de chaque élément.
    Utilise une boucle pour parcourir le tableau, mettre à jour les compteurs et vérifier si l'élément actuel est le plus fréquent.
    En cas d'égalité, le premier élément rencontré avec cette fréquence est privilégié.

Retourne l'élément le plus fréquent : La méthode renvoie l'élément qui apparaît le plus souvent dans le tableau.
*/