41 lines
1.4 KiB
Java
41 lines
1.4 KiB
Java
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<Map.Entry<Integer, String>> {
|
|
|
|
/**
|
|
* 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<Integer, String> entree1, Map.Entry<Integer, String> 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();
|
|
}
|
|
}
|