J'ai écrit un comparateur pour un PriorityQueue afin qu'il me donne la plus petite valeur basée sur la première valeur dans ArrayList à partir de la HashMap.Mise à jour de HashMap/ArrayList passée à PriorityQueue Comparator
Mon problème est que, dans le reste de mon programme, j'ai besoin de mettre à jour/modifier ces premières valeurs dans ArrayList. Je ne suis pas sûr comment faire cela pour m'assurer que la file d'attente prioritaire me donne toujours le bon résultat basé sur les mises à jour?
Merci
public class MyComparator implements Comparator<Integer>{
HashMap<Integer, ArrayList<Integer>> hm;
public MyComparator(HashMap<Integer, ArrayList<Integer>> hm){
this.hm = hm;
}
@Override
public int compare (Integer num, Integer num1){
ArrayList<Integer> list = hm.get(num);
int w = list.get(0);
ArrayList<Integer> list1 = hm.get(num1);
int w1 = list1.get(0);
if(w1 - w == 0){
return 0;
}
if(w1 - w <= 0){
return 1;
}
else{
return -1;
}
}
}
Il vous donnera le résultat approprié au moment où vous appelez la méthode de comparaison. aussi, juste pour mentionner qu'il ne devrait pas être 'if (w1 - w <0) {return 1;}'? – Thrasher
Ainsi la méthode de comparaison est appelée chaque fois que je fais PriorityQueue.peek(); ? Donc, en utilisant les listes de hachage carte/tableau mis à jour? Et ouais merci de l'avoir signalé ... le '=' ne devrait pas être là – Lsldioo