package fr.iutfbleau.sae.mhuffman; import java.util.Comparator; import java.util.Map; /** * * Comparateur utilisé lors de la génération des codes canoniques. * Il permet de trier des couples (symbole, code Huffman sous forme de chaîne). * * Le tri se fait dans cet ordre : * 1. Par longueur du code (du plus court au plus long) * 2. En cas d'égalité, par ordre croissant des symboles */ public class ComparateurCanonique implements Comparator> { /** * Compare deux entrées contenant un symbole et son code Huffman. * * @param entree1 première entrée à comparer * @param entree2 deuxième entrée à comparer * @return un entier négatif si entree1 doit venir avant entree2, * positif si elle doit venir après, * et zéro si elles sont équivalentes selon le tri. */ @Override public int compare(Map.Entry entree1, Map.Entry entree2) { int longueur1 = entree1.getValue().length(); int longueur2 = entree2.getValue().length(); // On compare d'abord la longueur des codes if (longueur1 != longueur2) { return longueur1 - longueur2; } // Si les longueurs sont identiques, on trie par symbole return entree1.getKey() - entree2.getKey(); } }